我试图强制sslredirect,但我的域有一个像这样的domain.com:8888端口
以下似乎没有工作,现在我甚至无法访问该网站,如果我添加rewrite
server { listen 8888; server_name sy-system.net; rewrite ^ https://$server_name:8888$request_uri? permanent; ssl on; ssl_certificate /path/to/certs/domain.pem; ssl_certificate_key /path/to/certs/domain.key; }
在单个端口上处理SSL和非SSL请求是不可能的。 如果您想在同一个域上同时投放,则需要为SSL版本使用第二个端口。
有两种方法可以通过双重HTTP HTTPS服务器模块或使用两个服务器模块(首选)使用一个服务器模块来侦听8888端口和标准443 SSL端口。
# Server accepts 8888 and SSL but redirects to HTTPS when no SSL protocol used server { listen 8888; # usually 80 listen 443 ssl; server_name example.com; # replace example.com with your domain name ssl on; ssl_certificate /path/to/certs/domain.pem; ssl_certificate_key /path/to/certs/domain.key; if ($ssl_protocol = "") { rewrite (.*) https://$server_name$1 permanent; } }
还有另一种方法可以避免将服务器分成两个块的情况。
# SSL Site server { listen 443 ssl; server_name example.com; # replace example.com with your domain name ssl on; ssl_certificate /path/to/certs/domain.pem; ssl_certificate_key /path/to/certs/domain.key; } # Non-SSL Site server { listen 8888; # usually 80 server_name example.com; # replace example.com with your domain name rewrite (.*) https://$server_name$1 permanent; }
请注意,由于我使用的是标准端口(80,443),所以没有经过testing,但是通过阅读文档推断。 您可能还希望在侦听语句中包含IP地址,因为无论如何SSL必须绑定到专用IP。
资料来源:
这是可能的。 如果您需要使用uri中的端口:
server { listen 8888 ssl; # listen for ipv4; this line is default and implied ssl on; ssl_certificate /path/to/certs/domain.pem; ssl_certificate_key /path/to/certs/domain.key; error_page 497 https://$server_name:8888$request_uri; }
在uriL没有端口
server { listen 8888 ssl; ssl on; ssl_certificate /path/to/certs/domain.pem; ssl_certificate_key /path/to/certs/domain.key; error_page 497 https://$server_name$request_uri; }