我正在使用SSL设置nginx服务器。
ssl的域名是www.mydomain.com
我想重定向所有请求:
http://mydomain.com,http://www.mydomain.com,& https://mydomain.com到
我目前设置了以下服务器块:
server{
listen 443 ssl;
root /www/mydomain.com/;
ssl_certificate /ssl/domain.crt;
ssl_certificate /ssl/domain.key;
.
.
.
}
server{
listen 80;
server_name mydomain.com;
return 301 https://www.mydomain.com$request_uri;
}
server{
listen 80;
server_name www.mydomain.com;
return 301 https://www.mydomain.com$request_uri;
}
server{
listen ssl 443;
server_name mydomain.com;
return 301 https://www.mydomain.com$request_uri;
}
目前这不起作用,但我不明白为什么不行。我可以得到http - >的组合https工作或没有www到 - > www工作,但如上所述混合它们不起作用。
答案 0 :(得分:17)
如果您的ssl证书不支持非www域,则ssl重定向将不起作用。 配置正确,但可以简化为1个重定向服务器
另请不要忘记重新加载nginx sudo service nginx reload
server {
listen 80;
listen 443 ssl;
server_name example.com;
# add ssl settings
return 301 https://www.example.com$request_uri;
}
答案 1 :(得分:9)
我迟到了,但你可以这样做
server{
listen 443 ssl;
server_name www.mydomain.com;
root /www/mydomain.com/;
ssl on;
ssl_certificate /ssl/domain.crt;
ssl_certificate /ssl/domain.key;
.
.
.
}
server{
listen 80;
server_name www.mydomain.com mydomain.com;
return 301 https://$server_name$request_uri;
}
server{
listen 443;
server_name mydomain.com;
return 301 https://www.$server_name$request_uri;
}
或者您可以将return 301 https://www.$server_name$request_uri;
替换为rewrite ^ http://www.$server_name$request_uri? permanent;
,两者都有效。
您还需要在谷歌网站管理员中设置此项以获得更好的搜索引擎优化。
答案 2 :(得分:0)
#If you like to redirect all "http" to "https" then add the following:
server {
listen 80;
server_name yourdomain.com;
server_name www.yourdomain.com;
if ($scheme = "http")
{
rewrite ^(.*)$ https://yourdomain.com$1 permanent;
}
}
答案 3 :(得分:0)
这对我来说适用于HTTP到https重定向,
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.php index.html index.htm index.nginx-debian.html;
server_name example.com;
#For HTTP to HTTPS:
proxy_set_header X-Forwarded-Proto $scheme;
if ( $http_x_forwarded_proto != 'https' )
{
return 301 https://$host$request_uri;
}
location / {
try_files $uri $uri/ /index.php;
add_header 'Access-Control-Allow-Origin' '*';
}
location ~ \.php$ {
include fastcgi.conf;
fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
}
location ~ /\.ht {
deny all;
}
}
谢谢。
答案 4 :(得分:0)
使用重写将所有 HTTP 流量发送到 HTTPS:
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
return 301 https://$host$request_uri;
}
此配置侦听端口 80 作为 IPv4 和 IPv6 的默认服务器,并且 对于任何主机名。 return 语句返回一个 301 永久重定向到 HTTPS 服务器在同一主机上并请求 URI。
答案 5 :(得分:0)
Please add two given things on your file.
Given code paste on top side
server {
listen 80;
server_name linuxize.com www.linuxize.com;
return 301 https://linuxize.com$request_uri;
}
Given code paste on bottom side.
server {
listen 443 ssl http2;
server_name www.linuxize.com;
# . . . other code
return 301 https://linuxize.com$request_uri;
}
了解更多click here!