Nginx - ip 转 https

Nginx - ip 转 https

我有一个 nginx 配置问题。在浏览器中通过 @ip:port 访问服务时,我无法强制使用 HTTPS。例如,我使用 emby,并且 emby.domain.com 重定向到https://emby.domain.com。但是 myip:8096(包含端口)不会重定向到 https://... 所有服务都是这样。
令人惊讶的是,如果我只输入服务器的 ip 而不输入端口,它会将我重定向到https://myip我收到 404 错误。

这是我的服务器块:

ssl_certificate /crt/ssl.crt;
ssl_certificate_key /crt/ssl.key;

# redirect 80 to 443
server {
        listen 80;
        return 301 https://$host$request_uri;
}

# stop main domain access
server {
        listen 443 ssl;
        server_name domain.com www.domain.com;
        ssl on;

        location / {
        return 404;
    }
}

# a service for example
server {
        listen 443 ssl;
        server_name my.domain.com www.my.domain.com;
        ssl on;

        location / {
                proxy_pass http://localhost:8000;
        }
}

您有想法吗?:)

答案1

添加default_server您的 HTTP 块listen_directive,使其看起来像这样:

# redirect 80 to 443
server {
    listen 80 default_server;
    return 301 https://$host$request_uri;
}

server这会导致 nginx 将所有没有Host标头的请求或包含与端口Host配置不匹配的标头的请求发送到此块。server_name

答案2

你的配置不对,应该是这样的

ssl_certificate /crt/ssl.crt;
ssl_certificate_key /crt/ssl.key;

# redirect 80 to 443
server {
        listen 80;
        return 301 https://$host$request_uri;
}

# stop main domain access
server {
        listen 443 ssl;
        server_name domain.com www.domain.com;
        ssl on;

        location / {
        return 404;
    }
}

# a service for example
server {
        listen 443 ssl;
        server_name my.domain.com www.my.domain.com;
        ssl on;

        location / {
                proxy_pass http://yourip:8096;
        }
}

相关内容