Nginx将HTTP重定向到HTTPS,将非www重定向到ww

ibps3vxo  于 2023-02-21  发布在  Nginx
关注(0)|答案(8)|浏览(229)

我正在设置一个带有SSL的Nginx服务器。
使用SSL的域为www.mydomain.example
我想重定向来自以下位置的所有请求:
http://mydomain.examplehttp://www.mydomain.examplehttps://mydomain.example
https://www.mydomain.example
我当前设置了以下服务器块:

server{
  listen 443 ssl;
  root /www/mydomain.example/;

  ssl_certificate /ssl/domain.crt;
  ssl_certificate /ssl/domain.key;
  .
  .
  .
}

server{
  listen 80;
  server_name mydomain.example;
  return 301 https://www.mydomain.example$request_uri;
}

server{
  listen 80;
  server_name www.mydomain.example;
  return 301 https://www.mydomain.example$request_uri;
}

server{
  listen ssl 443;
  server_name mydomain.example;
  return 301 https://www.mydomain.example$request_uri;
}

目前这个方法不起作用,但我不明白为什么不起作用。我可以得到HTTP -〉HTTPS工作或no-www to -〉www工作的组合,但如上所述将它们混合是不起作用的。

nimxete2

nimxete21#

如果您的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;
}
hfsqlsce

hfsqlsce2#

我迟到了,但你可以这样做

server{
  listen 443 ssl;
  server_name www.mydomain.example;
  root /www/mydomain.example/;
  
  ssl    on;
  ssl_certificate /ssl/domain.crt;
  ssl_certificate /ssl/domain.key;
  .
  . 
  .
}

server{
  listen 80;
  server_name www.mydomain.example mydomain.example;
  return 301 https://$server_name$request_uri;
}

server{
  listen 443;
  server_name mydomain.example;
  return 301 https://www.$server_name$request_uri;
}

或者您可以将return 301 https://www.$server_name$request_uri;替换为rewrite ^ http://www.$server_name$request_uri? permanent;,两者都可以工作。
你也需要在谷歌网站管理员设置更好的搜索引擎优化。

a14dhokn

a14dhokn3#

这对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;
    }
}
bttbmeg0

bttbmeg04#

使用重写将所有HTTP流量发送到HTTPS:

server {
 listen 80 default_server;
 listen [::]:80 default_server;
 server_name _;
 return 301 https://$host$request_uri;
}

此配置将端口80作为IPv4和IPv6以及任何主机名的默认服务器进行侦听。return语句将返回301永久重定向到同一主机和请求URI上的HTTPS服务器。

rqmkfv5c

rqmkfv5c5#

#If you like to redirect all "http" to "https" then add the following:
server {
        listen 80;

        server_name yourdomain.example;
        server_name www.yourdomain.example;

 if ($scheme = "http")
        {
                rewrite ^(.*)$ https://yourdomain.example$1 permanent;
        }
}
6l7fqoea

6l7fqoea6#

请在你的档案上加上两件事。
要粘贴到顶部的代码:

server {
    listen 80;
    server_name example.com www.example.com;
    return 301 https://example.com$request_uri;
}

要粘贴到底部的代码:

server {
    listen 443 ssl http2;
    server_name www.example.com;

    # . . . other code

    return 301 https://example.com$request_uri;
}

Source

kmb7vmvb

kmb7vmvb7#

我试图通过重定向请求URI到HTTPS来修复这个问题,如果它是用HTTP方案请求的话。

if ($scheme = http) {
    return 301 https://$server_name$request_uri;
}

当我们在浏览器的搜索栏中输入域名时,它默认使用HTTP方案进行请求,浏览器的这种行为不是nginx处理的,而是可以手动处理的,我们需要通过添加error_page 497 https://$server_name$request_uri;来处理497状态码。

error_page 497 https://$server_name$request_uri;

if ($scheme = http) {
    return 301 https://$server_name$request_uri;
}

497表示什么,何时出现?

  • 当客户端向专门侦听HTTPS请求的端口发出HTTP请求时,将使用497 HTTP请求发送到HTTPS端口。*
1mrurvl1

1mrurvl18#

我不明白为什么HTTPx 1 e0f1x不能重定向到HTTPx 1 e1f1x。我已经像其他人一样根据https://nginx.org/en/docs/http/configuring_https_servers.html配置了它,即使在使用nginx -s reload && sudo systemctl restart nginx重新启动服务器之后
/etc/nginx/可用站点/example.com

server {
    listen 80;
    server_name www.example.com example.com;
    return 301 https://$server_name$request_uri;
}

server {
    ssl_certificate /etc/letsencrypt/live/www.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/www.example.com/privkey.pem;
    ssl_session_cache shared:SSL:1m;
    ssl_session_timeout 1m;

    listen                  443 ssl http2 default_server;
    listen                  [::]:443 ssl http2 default_server;
    server_name             www.example.com example.com;
    root                    /var/www/build;
    index                   index.html;
    location / {
                            try_files $uri /index.html =404;
    }
}

但即使我使用的是最新的浏览器,从HTTP到HTTPS的重定向只适用于最新的隐身窗口:

  • Firefox:110.0(64位)(台式机和移动的设备)

与最新的隐身窗口,即使在清除缓存和硬重新加载:

  • Brave:版本1.48.164 chrome :110.0.5481.100(正式版本)(x86_64)
  • Chrome浏览器:版本110.0.5481.100(官方版本)(x86_64)

使用Brave和Chrome浏览器时,它只会从/var/www/html/index. nginx-debian. html加载默认的HTTP页面“欢迎使用nginx!”

相关问题