NGINX 将 http 重定向到 https,将非 www 重定向到 ww
Posted
技术标签:
【中文标题】NGINX 将 http 重定向到 https,将非 www 重定向到 ww【英文标题】:NGINX Redirect http to https and non-www to ww 【发布时间】:2014-02-02 03:01:38 【问题描述】:我正在使用 SSL 设置 nginx 服务器。
带有 ssl 的域是 www.mydomain.com
我想重定向所有请求:
http://mydomain.com, http://www.mydomain.com, & https://mydomain.com 到
https://www.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 工作或 no-www 到 -> www 工作的组合,但如上所述混合它们不起作用。
【问题讨论】:
【参考方案1】:如果您的 ssl 证书不支持非 www 域,则 ssl 重定向将不起作用。 配置正确,但可以减少到只有 1 个重定向服务器
另外别忘了重新加载nginxsudo service nginx reload
server
listen 80;
listen 443 ssl;
server_name example.com;
# add ssl settings
return 301 https://www.example.com$request_uri;
【讨论】:
这正是我想要的,并且正在以相反的方式使用它。谢谢! 如果您需要,您需要一个单独的服务器,服务器名称为www.domain.com
,并连接到端口 80 来执行额外的重定向。
这给了我 - nginx: [emerg] invalid parameter "443" in /etc/nginx/nginx.conf:96
你可以粘贴那行'96',也是你的nginx版本
我刚刚在那个版本上测试过,它也给了我同样的结果,你可以把它分成两条听线listen 80;
和listen 443;
【参考方案2】:
我迟到了,但你可以这样做
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;
,两者都可以。
您还需要在 google 网站管理员中设置此项以获得更好的 SEO。
【讨论】:
好像错了,www.mydomain.com 将在 listen 80 块中被替换为 www.www.mydomain.com。 @Feras 我已经更新了答案,请检查。如果您有任何问题,请告诉我。 @Feras 太好了,我很高兴这有帮助。 这似乎不适用于 https//mydomain.com 它将 https//mydomain.com 重定向到 https//www.mydomain.com,如果不想重定向则删除第三个块。【参考方案3】:#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;
【讨论】:
【参考方案4】:这对我来说适用于 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;
谢谢。
【讨论】:
【参考方案5】:使用重写将所有 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。
【讨论】:
【参考方案6】: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!
【讨论】:
以上是关于NGINX 将 http 重定向到 https,将非 www 重定向到 ww的主要内容,如果未能解决你的问题,请参考以下文章
将 HTTP 重定向到 HTTPS(中间件重定向 vs Nginx)
使用 nginx 将 Elastic Beanstalk HTTP 请求重定向到 HTTPS