Estou com um erro ao tentar redirecionar https://example.com para https://www.example.com .
Quando vou para https://example.com , ele não redireciona e retorna o status da página / 200.
Não quero isso, quero que ele seja redirecionado para https://www.example.com .
Quando vou para http://example.com , ele é redirecionado para https://www.example.com
Alguém pode me dizer onde estou errado?
Estes são meus arquivos de configuração padrão e default-ssl:
default.conf
server {
listen 80;
server_name example.com;
return 301 https://www.example.com$request_uri;
}
default-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
Thomas V.
fonte
fonte
Respostas:
Está faltando uma
listen
diretiva no arquivodefault-ssl.conf
. Adicionarlisten 443;
nesta diretivaPor padrão, se você omitir essa diretiva, o nginx assume que deseja escutar na porta 80. Aqui está a documentação desse comportamento padrão.
Edit: Obrigado pelo comentário de @TeroKilkanen.
Aqui a configuração completa do seu default-ssl.conf
Nota : Você pode substituir a
ssl on;
diretivalisten 443 ssl;
por recomendação da documentação do nginx .fonte
ssl_certificate
essl_certificate_key
diretivas nesse bloco e usá-listen 443 ssl;
lo para que ele seja um vhost SSL.default-ssl.conf
. Talvez algum problema de digitação ou reordenação tenha causado isso.Basta colocar uma declaração if e você deve estar a caminho. Eu verifiquei os resultados em curl.exe -I e todos os casos, além de https://www.example.com, são tratados como 301. O SSL é complicado porque é verificado antes de você obter o redirecionamento de URL 301. Portanto, você obtém erros de certificado.
Pessoalmente, gosto de remover os wwws do domínio, mas escrevi meu código abaixo para responder à sua pergunta.
fonte
A maneira como faço isso é usar uma instrução if dentro do bloco do servidor ssl que redireciona para https de www
Obviamente, sempre que você desejar usar uma instrução if em um arquivo de configuração nginx; você deveria ter lido: https://www.nginx.com/resources/wiki/start/topics/depth/ifisevil/
fonte
if ($host = 'www.example.com')
não é necessária.Seu 2018 agora e imaginei dar a este um tiro renovado, caso alguém esteja procurando uma solução simples.
Minha opinião sobre isso como um recém-chegado é tornar as coisas o mais simples possível. Basicamente, você deseja redirecionar http://example.com e https://example.com para https : // www .example.com. E que você só consegue redirecionar http://example.com
Esta é uma operação simples que requer apenas dois blocos de servidor (eu demonstrarei isso brevemente em um único arquivo de configuração)
Agora, http://example.com e https://example.com devem ser redirecionados para https://www.example.com . Basicamente, essa configuração redireciona tudo que não é www e / ou não é https para https: // www .
fonte
Para redirecionar todas as solicitações para
https://www.example
crie um bloco de servidor para o redirecionamento e o domínio principal em sua porta SSL (normalmente 443), bem como a porta http padrão 80
salve e siga com
sudo nginx -s reload
Isso redirecionará
fonte
;
no segundo bloco do servidor na cláusula if. Deveria serreturn 301 https://www.example.com$request_uri;
http
on443
?