我设置了一台 nginx 服务器(两个配置文件),并设置了两台 gunicorn web 服务器,并正在运行。一台 gunicorn 是生产环境,另一台是准备环境。
我希望 nginx 为 xyz.com 提供 http 请求以及为 xyz.com 提供 https 请求到生产 gunicorn 服务器 @ 127.0.0.1:8000。
我已经通过以下方式实现了这一点:
server {
listen 80;
server_name xyz.com;
return 301 https://$http_host$request_uri;
}
server {
listen 443 ssl;
server xyz.com;
..... <<< ssl stuff
location /{
.... proxy_stuff
proxy_pass http://127.0.0.1:8000;
}
}
我还希望到 xyz.com:8080 的 http 流量和到 xyz.com:8080 的 https 流量能够到达临时服务器 @ 127.0.0.1:8081。我已经能够按如下方式将 https 流量发送到 xyz.com:8080:
server {
listen 8080 ssl;
server_name xyz.com;
...... << ssl stuff
location / {
...... << proxy stuff
proxy_pass http://127.0.0.1:8081;
}
}
但我似乎找不到将 xyz.com:8080 上的 http 流量重定向到 xyz.com:8080 上的 https 流量的方法。我尝试了与端口 80 相同的重定向,但没有成功。
可以使用一些方向。
答案1
根据您所说的,您希望在端口 8080 上监听 http 和 https,我认为这是不可能的。为不同的端口设置不同的服务器块,使用其中的位置块,您可以将相同的 proxy_pass 传递到您想要的任何位置。
这可能是最接近您所说的内容,即监听 8080 http、8081 https,并从 http 转发到 https。重写可能不完全正确,但您明白我的意思。
server {
listen 8080; # HTTP
server_name example.com;
rewrite ^ https://example.com:8081$request_uri? redirect;
# rewrite ^ https://example.com:8081 redirect; # Alternate rewrite
}
server {
listen 8081 ssl;
server_name example.com;
// ...... << ssl stuff
location / {
// ...... << proxy stuff to forward to http
proxy_pass http://127.0.0.1:8080;
// If you are not proxying to a service on the same server you can use the line below
// proxy_pass http://example.com:8080;
}
}