我想用NginX将所有http请求重定向到https,但我遇到了一些困难。
这是我的vhost文件:
server {
gzip off;
listen 80;
listen [::]:80;
server_name mydomain.fr www.mydomain.fr sub.otherdom.fr otherdom.fr;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
root /usr/share/nginx/html;
index index.html index.htm;
ssl on;
server_name mydomain.fr www.mydomain.fr sub.otherdom.fr otherdom.fr;
ssl_certificate /root/tmp/live-ecdsa/mydomain.fr/0001_chain.pem;
ssl_certificate_key /root/tmp/live-ecdsa/mydomain.fr/privkey-p384.pem;
access_log /var/log/nginx/default.access.log;
charset utf-8;
location / {
try_files $uri $uri/ /index.html;
}
}
尝试使用不同浏览器的普通http访问这些域会导致以下结果: Chrome / Firefox:下载填充了字节数据的文件
边缘:显示包含€ÿÿÿÿ
curl -I mydomain.fr
输出▒▒
直接通过https访问这些域。
我已经尝试了return 301 https://$host$request_uri;
和return 301 https://$server_name$request_uri;
答案 0 :(得分:1)
我怀疑它与您在一个非常本地范围的上下文中的一个服务器名称字段中声明的相当多的服务器名称有关。虽然,如果我是诚实的,这是一个基于习惯的相当毫无根据的断言,我已成为用户。
我建议了一些事情,虽然通常大部分内容都不会解决你的问题,但它可能会更容易解决发生的事情:
假设您从其他地方引用了所有其他相关的ssl / tls设置,那么下面应该大致有用。
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name mydomain.fr;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2 default_server;
listen [::]:443 ssl http2 default_server;
root /usr/share/nginx/html;
$server_name mydomain.fr
location / {
try_files $uri $uri/ /index.html;
}
}
答案 1 :(得分:0)
好吧,虽然user6788523响应帮助我调试,但错误在我身边。
我有几个其他vhost文件,http2指令与http端口80(listen [::]:80 http2;
)相关联。删除http2
指令解决了问题。
此设置必须仅用于启用ssl的服务器块