2015-12-28 4 views
2

Я просмотрел переполнение стека, но каждый раз, когда я нахожу кусок кода, который, как говорят люди, работает, он, к сожалению, не работает для меня.Nginx - перенаправление без ssl & non www to ssl & www

Я использую Laravel on Forge и пытаюсь перенаправить не www & non ssl в ssl + www.

Это работает. Однако он не перенаправляет https://example.com. Он перенаправляет все остальные: example.com or www.example.com or http://example.com or http://www.example - https://www.example.com кроме одного упомянутого выше.

Я понятия не имею, почему это происходит.

Вот мой Nginx файл:

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

server { 
    listen 80; 
    server_name xxx.xxx.xxx.xxx; 

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

server { 
    listen 443 ssl; 
    server_name example.com; 
    root /home/forge/example.com/public; 

    # FORGE SSL (DO NOT REMOVE!) 
    ssl_certificate /etc/nginx/ssl/example.com/21671/server.crt; 
    ssl_certificate_key /etc/nginx/ssl/example.com/21671/server.key; 

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2; 

    index index.html index.htm index.php; 

    charset utf-8; 

    location/{ 
     try_files $uri $uri/ /index.php?$query_string; 
    } 

    location = /favicon.ico { access_log off; log_not_found off; } 
    location = /robots.txt { access_log off; log_not_found off; } 

    access_log off; 
    error_log /var/log/nginx/example.com-error.log error; 

    error_page 404 /index.php; 

    location ~ \.php$ { 
     fastcgi_split_path_info ^(.+\.php)(/.+)$; 
     fastcgi_pass unix:/var/run/php/php7.0-fpm.sock; 
     fastcgi_index index.php; 
     include fastcgi_params; 
    } 

    location ~ /\.ht { 
     deny all; 
    } 

    #cache: 
    location ~* \.(css|js|gif|jpe?g|png)$ { 
     expires 168h; 
     add_header Pragma public; 
     add_header Cache-Control "public, must-revalidate, proxy-revalidate"; 
    } 

} 

ответ

0

Поскольку ваши первые два сервера только слушать пост 80 (без SSL).

Измените их так:

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

server { 
    listen 443 ssl; 
ssl_certificate /etc/nginx/ssl/example.com/21671/server.crt; 
ssl_certificate_key /etc/nginx/ssl/example.com/21671/server.key; 
    server_name example.com; 

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

Я получаю сервера не найдена ошибка –

+0

Я отредактировал мой ответ. Я думаю, что сейчас хорошо. – Alex

+0

По-прежнему та же проблема. Chrome показывает это: 'DNS_PROBE_FINISHED_NXDOMAIN'. Может быть, это потому, что я должен «слушать 443» в моем файле конфигурации? Твой и другой, который у меня уже был? –

Смежные вопросы