强制使用 ssl nginx 端口

强制使用 ssl nginx 端口

我正在尝试强制 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;
    }

相关内容