应用程序上的 SSL - nginx Web 服务器

应用程序上的 SSL - nginx Web 服务器

我正在运行一个 nginx 网络服务器,其中我将所有 http 请求重定向到 https(使用自签名证书)。

以下是我在 nginx 配置文件中将所有 http 请求重定向到 https 的方法:

server { 
listen 80 default_server; 
listen [::]:80 default_server ipv6only=on; 
server_name my.server.ip; 
return 301 https://$server_name$request_uri;

问题是 - 对于在端口上运行的应用程序,我似乎无法做到这一点。例如:

http://我的服务器ip:1234不重定向https://我的服务器ip:1234

ir 在所有其他网址上都可以正常工作,例如http://my.server.ip/tempETC。

我如何修改 nginx 配置文件以强制该应用程序 url 通过 ssl?

答案1

首先,您需要弄清楚如何设置您的应用程序以使用 https。

该应用程序必须对 http 和 https 连接使用不同的端口。

如果应用程序不支持 https,则必须通过 nginx 传递所有流量。配置如下所示:

server {
    listen 1234 ssl;
    listen [::]:1234 ssl ipv6only=on;
    ssl_certificate /path/to/certificate/file;
    ssl_certificate_key /path/to/key/file;
    error_page 497 =301 https://domain.name:1234$request_uri;
    proxy_pass http://127.0.0.1:1235;
}

这里我们有一个 nginx 服务器块,它监听端口 1234 上的 SSL 连接。所有对端口 1234 的 HTTPS 请求都代理到监听端口 1235 的应用程序。

error_page 497指令将所有对 1234 端口的 HTTP 请求重定向到 https 版本。

您不能为应用程序和 nginx 分配相同的端口,因此我为应用程序选择了 1236。

答案2

好的,我搞明白了 - 在这里发布给其他人...基本上@Tero 给了我通过 nginx 传递所有流量的想法。以下是我的做法:

server {
        listen 1234 ssl;
        listen [::]:1234 ssl ipv6only=on;
        server_name your.server.ip.here;
        ssl_certificate /path/to/certificate/file;
        ssl_certificate_key /path/to/key/file;
        error_page 497 =301 https://$server_name:1234$request_uri;

location / {
    proxy_pass http://$server_name:4321;
}

}

在上面的例子中 - 我的“应用程序”配置为在端口 4321 上运行。我将使用端口 1234 通过浏览器访问它,它将通过 https 在后台将其“代理传递”到 4321。

希望这能帮助其他有疑问的人:)

相关内容