nginx 在两个不同的端口上接受 HTTP 和 HTTPS 请求

nginx 在两个不同的端口上接受 HTTP 和 HTTPS 请求

我设置了一台 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; 
  }
}

相关内容