У меня ошибка при попытке перенаправить https://example.com на https://www.example.com .
Когда я захожу на https://example.com , он не перенаправляет и возвращает статус страницы / 200.
Я не хочу этого, я хочу, чтобы он перенаправил на https://www.example.com .
Когда я захожу на http://example.com , он перенаправляет на https://www.example.com
Может кто-нибудь сказать мне, где я иду не так?
Это мои файлы конфигурации по умолчанию и default-ssl:
default.conf
server {
listen 80;
server_name example.com;
return 301 https://www.example.com$request_uri;
}
по умолчанию-ssl.conf
upstream app_server_ssl {
server unix:/tmp/unicorn.sock fail_timeout=0;
}
server {
server_name example.com;
return 301 https://www.example.com$request_uri
}
server {
server_name www.example.com;
listen 443;
root /home/app/myproject/current/public;
index index.html index.htm;
error_log /srv/www/example.com/logs/error.log info;
access_log /srv/www/example.com/logs/access.log combined;
ssl on;
ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
ssl_certificate /srv/www/example.com/keys/ssl.crt;
ssl_certificate_key /srv/www/example.com/keys/www.example.com.key;
ssl_ciphers AES128-SHA:RC4-MD5:ECDH+AESGCM:ECDH+AES256:ECDH+AES128:DH+3DES:RSA+3DES:!ADH:!AECDH:!MD5:AES128-SHA;
ssl_prefer_server_ciphers on;
client_max_body_size 20M;
try_files $uri/index.html $uri.html $uri @app;
# CVE-2013-2028 http://mailman.nginx.org/pipermail/nginx-announce/2013/000112.html
if ($http_transfer_encoding ~* chunked) {
return 444;
}
location @app {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://app_server_ssl;
}
error_page 500 502 503 504 /500.html;
location = /500.html {
root /home/app/example/current/public;
}
}
nginx
ssl
ssl-certificate
https
Томас В.
источник
источник
Ответы:
Вы пропустили
listen
директиву в файлеdefault-ssl.conf
. Добавьтеlisten 443;
в эту директивуПо умолчанию, если вы пропустите эту директиву, nginx предполагает, что вы хотите прослушивать порт 80. Вот документация этого поведения по умолчанию.
Редактировать: Спасибо за комментарий от @TeroKilkanen.
Здесь полный конфиг для вашего default-ssl.conf
Sidenote : Вы можете заменить
ssl on;
директивуlisten 443 ssl;
как рекомендацию из документации nginx .источник
ssl_certificate
иssl_certificate_key
директивы в этом блоке, и использовать ихlisten 443 ssl;
так, чтобы это был SSL vhost.default-ssl.conf
. Может быть, это вызвано какой-то опечаткой или проблемой заказа.Просто добавьте заявление, и вы должны быть на своем пути. Я проверил результаты в curl.exe -I, и все случаи, кроме https://www.example.com, обрабатываются как 301. SSL сложен, потому что проверяется до того, как вы получите перенаправление URL 301. Следовательно, вы получаете ошибки сертификата.
Лично мне нравится удалять www из домена, но я написал свой код ниже, чтобы ответить на ваш вопрос.
источник
Для этого я использую оператор if внутри блока ssl-сервера, который перенаправляет на https of www
Конечно, всякий раз, когда вы хотите использовать оператор if в конфигурационном файле nginx; Вы должны были прочитать: https://www.nginx.com/resources/wiki/start/topics/depth/ifisevil/
источник
if ($host = 'www.example.com')
не обязательно.Сейчас 2018 год, и я решил дать этому новый шанс, если кто-то ищет простое решение.
Мой взгляд на это как на новичка - сделать вещи максимально простыми. В основном вы хотите перенаправить как http://example.com, так и https://example.com на https : // www .example.com. И что вам удастся только перенаправить http://example.com
Это довольно простая операция, требующая только двух серверных блоков (я кратко продемонстрирую это в одном файле конфигурации)
Теперь и http://example.com, и https://example.com должны перенаправить на https://www.example.com . По сути, эта установка перенаправляет все не-www и / или не-https на https: // www .
источник
Чтобы перенаправить все запросы на
https://www.example
создайте серверный блок для перенаправления и основного домена на вашем SSL-порту (обычно 443), а также http-порт по умолчанию 80
сохранить и следовать с
sudo nginx -s reload
Это перенаправит
источник
;
во втором блоке сервера в предложении if. Это должно бытьreturn 301 https://www.example.com$request_uri;
http
на443
?