我正在尝试强制 SSL 重定向,但我的域名有一个这样的端口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;
}
答案1
无法在单个端口上同时处理 SSL 和非 SSL 请求。如果您想在同一个域上同时处理这两种请求,则需要为 SSL 版本使用第二个端口。
答案2
有两种方法可以做到这一点,通过双 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;
}
}
还有另一种方法可以通过将服务器分成两个块来避免 if 语句。
# 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),因此这些端口没有经过测试,而是通过阅读文档推断出来的。您可能还想在 listen 语句中包含 IP 地址,因为 SSL 无论如何都必须绑定到专用 IP。
资料来源:
答案3
有可能的。
如果您使用 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;
}
对于 URI 中没有端口的情况:
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;
}