我正在运行一个 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。
希望这能帮助其他有疑问的人:)