2016-08-03 3 views
0

Я использую SSL для конфигурации моего сервера. После этого, когда пользователь обращается к нашему веб-сайту, он немного жесткий, почти занимает значительное время для доступа. И попробуйте PageSpeed ​​Insight, результат подсказывает мне избежать перенаправления целевой страницы.Избегание переадресации целевой страницы с помощью SSL в Nginx

Avoid landing page redirects for the following chain of redirected URLs. 

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

Это новый вопрос для меня.

Мы используем новейшие Nginx. Здесь моя полная конфигурация в серверных блоках:

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

server { 
     listen 443 ssl; 
     server_name example.com; 
     ssl_certificate /etc/nginx/ssl/cert_chain.crt; 
     ssl_certificate_key /etc/nginx/ssl/*.example.com.key; 
     return 301 $scheme://www.example.com$request_uri; 
} 

server { 
     listen 443 ssl spdy; 
     add_header Strict-Transport-Security "max-age=31536000; includeSubdomain$ 

     server_name www.example.com 
     root /home/domain; 
     index index.html index.php index.htm; 

     ssl on; 
     ssl_certificate /etc/nginx/ssl/cert_chain.crt; 
     ssl_certificate_key /etc/nginx/ssl/*.example.com.key; 
     ssl_prefer_server_ciphers on; 
     ssl_dhparam /etc/ssl/certs/dhparam.pem; 
     ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GC$ 
     ssl_session_timeout 1d; 
     ssl_session_cache shared:SSL:50m; 
     ssl_stapling on; 
     ssl_stapling_verify on; 

     location/{ 
       try_files $uri $uri/ /index.php?q=$request_uri; 
     } 



    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 
    # 
    location ~ \.php$ { 
     root   /home/domain; 
     fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock; 
     fastcgi_index index.php; 
     fastcgi_param SCRIPT_FILENAME/home/domain$fastcgi_script_name; 
     include  fastcgi_params; 
    } 

    #error_page 404    /404.html; 

    # redirect server error pages to the static page /50x.html 
    # 
    error_page 500 502 503 504 /50x.html; 
    location = /50x.html { 
     root /usr/share/nginx/html; 
    } 


    # deny access to .htaccess files, if Apache's document root 
    # concurs with nginx's one 
    # 
    #location ~ /\.ht { 
    # deny all; 
    #} 
} 

Любое предложение?

+0

Вы сможете публиковать полный файл conf? –

+0

Я обновил свой конфиг, спасибо – agnanzakariya

ответ

0

Изменить редирект в вашем: 80 блока до конечного редирект, чтобы избежать ненужной перенаправлять https://example.com

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

Кроме того, я рекомендую добавить один и тот же набор связанных SSL директив блока server_name example.com. Используя ваш пример,

server { 
     listen 443 ssl; 
     server_name example.com; 
     ssl_certificate /etc/nginx/ssl/cert_chain.crt; 
     ssl_certificate_key /etc/nginx/ssl/*.example.com.key; 
     return 301 $scheme://www.example.com$request_uri; 
} 

должен быть

server { 
     --listen 443 ssl; 
     ++listen 443 ssl spdy; 
     server_name example.com; 
     ssl_certificate /etc/nginx/ssl/cert_chain.crt; 
     ssl_certificate_key /etc/nginx/ssl/*.example.com.key; 
     ++add_header Strict-Transport-Security "max-age=31536000; includeSubdomain$ 
     ++ssl_prefer_server_ciphers on; 
     ++ssl_dhparam /etc/ssl/certs/dhparam.pem; 
     ++ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GC$ 
     ++ssl_session_timeout 1d; 
     ++ssl_session_cache shared:SSL:50m; 
     ++ssl_stapling on; 
     ++ssl_stapling_verify on; 
     return 301 $scheme://www.example.com$request_uri; 
} 
0

Попробуйте это, я не знаю, почему вы добавили два разных подключения к серверу для подключения SSL через WWW и без WWW. это может быть запись в одном заявлении.

Почему вы используете 301 переадресацию в SSL, так или иначе вы уже принудительно перенаправляете или https.

Я также добавил правило перезаписи для перенаправления с или без www-соединений с https & удалено правило возврата 301.

Вот окончательный код, попробуйте, если не работает, дайте мне знать, у меня есть другой готовый для вас.

server { 
    listen   80; 
    server_name  example.com www.example.com; 
    rewrite  ^https://$server_name$request_uri? permanent;  
} 

server { 
    listen 443 ssl spdy; 
    add_header Strict-Transport-Security "max-age=31536000; includeSubdomain$ 
    server_name example.com www.example.com; 
    root /home/domain; 
    index index.html index.php index.htm; 
    ssl on; 
    ssl_certificate /etc/nginx/ssl/cert_chain.crt; 
    ssl_certificate_key /etc/nginx/ssl/*.example.com.key; 
    ssl_prefer_server_ciphers on; 
    ssl_dhparam /etc/ssl/certs/dhparam.pem; 
    ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GC$ 
    ssl_session_timeout 1d; 
    ssl_session_cache shared:SSL:50m; 
    ssl_stapling on; 
    ssl_stapling_verify on; 

    location/{ 
      try_files $uri $uri/ /index.php?q=$request_uri; 
    } 

    location ~ \.php$ { 
    root   /home/domain; 
    fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock; 
    fastcgi_index index.php; 
    fastcgi_param SCRIPT_FILENAME/home/domain$fastcgi_script_name; 
    include  fastcgi_params; 
} 
error_page 500 502 503 504 /50x.html; 
location = /50x.html { 
    root /usr/share/nginx/html; 
    } 
} 
+0

Эй, спасибо за ваш код, но кажется, что если я воспользуюсь вашим предложением, у меня есть старая проблема, потому что это прямо к домену без www, что в том случае, когда нам нужно сделать позицию нашего домена в WWW. – agnanzakariya