我有一个 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;
}
}