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反向代理:将所有http请求重定向到https

ELB Nginx 将 http 重定向到 https

使用 nginx 将 Elastic Beanstalk HTTP 请求重定向到 HTTPS

将 Http 重定向到 Elastic BeansTalk、Tomcat、Nginx 中的 Https

Nginx将所有[http / www / https www]重定向到[https non-www]