Назад | Перейти на главную страницу

Nginx Как перенаправить HTTP без www на HTTPS www с помощью одного перенаправления?

Я перенаправляю входящий HTTP-трафик на порт 80 на HTTPS на порт 443. Здесь я перенаправляю не-www на www:

http://example.com -> https://example.com -> https://www.example.com

Похоже, что Google Pagespeed Insights считает это "множественными переадресациями". Также кажется, что между каждым перенаправлением возникает задержка в 300-400 мс.

Есть ли способ сделать перенаправление за один шаг для всех сценариев?

  1. HTTP без www -> HTTPS www
  2. HTTP www -> HTTPS www
  3. HTTPS без www -> HTTPS www
  4. HTTPS www -> HTTPS www

Мой файл конфигурации ниже:

server {
        listen 80;
        server_name example.com;
        rewrite ^/(.*) https://example.com/$1 permanent;
}

server {
        root /var/www/html;

        index index.php index.js index.html index.htm index.nginx-debian.html;

        server_name example.com;
        return 301 https://www.example.com$request_uri;
        ssl_certificate /ssl/example.com.chained.crt;
        ssl_certificate_key /ssl/example.com.key;

        location / {
        proxy_pass http://localhost:8000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
        }

        location /wordpress {
        proxy_pass http://localhost:8090;
        proxy_http_version 1.1;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
        }
}

server {
        listen 443 ssl;
        listen [::]:443 ssl;

        root /var/www/html;

        index index.php index.js index.html index.htm index.nginx-debian.html;

        server_name www.example.com;
        ssl_certificate /ssl/example.com.chained.crt;
        ssl_certificate_key /ssl/example.com.key;

        location / {
        proxy_pass http://localhost:8000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
        }

        location /wordpress {
        proxy_pass http://localhost:8090;
        proxy_http_version 1.1;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
        }
}

В этой части вашей конфигурации вы можете:

  • вы можете поймать несколько имен example.com и www.example.com
  • вы можете перенаправить прямо на www.example.com

Пример всей конфигурации перенаправления:

server {
        listen 80;
        server_name example.com  www.example.com;
        rewrite ^/(.*) https://www.example.com/$1 permanent;
}

server {
    listen 443 ssl;
    listen [::]:443 ssl;

    server_name example.com;
    ssl_certificate /ssl/example.com.chained.crt;
    ssl_certificate_key /ssl/example.com.key;
    rewrite ^/(.*) https://www.example.com/$1 permanent;
}


server {
    listen 443 ssl;
    listen [::]:443 ssl;

    server_name www.example.com ;

    # HERE you push all you configuration for HTTPS://WWW.EXAMPLE.COM

    #.../.../

}