
Suponha que meu servidor principal sirva https://www.example.com
e o servidor de redirecionamento redirecione http://www.example.com
para https://www.example.com
. Como devo nomear esses dois servidores? Existe uma espécie de prática recomendada para isso?
O nome do servidor é principalmente uma preferência pessoal, de modo que posso nomear qualquer coisa?
Responder1
Ambos deveriam ser nomeados www.example.com
. Esse nome geralmente é muito importante porque se você hospedar mais de um host virtual no mesmo endereço IP, nginx
usará o nome para corresponder ao vhost que deve tratar a solicitação com aquele no Host
cabeçalho da solicitação http. No seu caso com dois vhosts, mas com protocolos diferentes (http/https), o protocolo (ou melhor, a Listen
porta) será usado para diferenciar ainda mais entre os dois vhosts.
Responder2
Os nomes dos servidores são uma parte importante da configuração do nginx. Se você servir vários domínios/subdomínios de um servidor com um único IP público, a server_name
diretiva informa ao nginx qual servidor deve responder a uma solicitação. Se não houver um nome de servidor correspondente, o nginx procurará em seguida um servidor padrão que, se presente, atue como uma espécie de servidor 'pega tudo'.
Aqui está umexemplo de configuraçãopara redirecionamento http -> https, onde você também pode ver como nomear servidores corretamente sem obter erros.
/etc/nginx/sites-available/www.example.com.vhost
# This server will redirect all http -> https
server {
# Listen for both IPv4 and IPv6 requests.
listen 80;
listen [::]:80;
server_name www.example.com example.com;
# This section assuming you're using Let's Encrypt / certbot
location ^~ /.well-known/acme-challenge/ {
default_type "text/plain";
root /path/to/your/document/root
}
location = /.well-known/acme-challenge/ {
return 404;
}
# Here's where your 301 permanent redirect to the https:/www version happens.
return 301 https://www.example.com$request_uri;
}
# This server will redirect all https requests without www to the version with www
server {
# Listen for both IPv4 and IPv6 requests and activate http2.
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name example.com;
ssl on;
# Paths to certificates assuming you're using Let's Encrypt / certbot
ssl_certificate /etc/letsencrypt/live/www.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/www.example.com/privkey.pem;
# There's much more directives you should fine tune for https, but that's another task.
# Here's where your 301 permanent redirect to the https://www version happens.
return 301 https://www.example.com$request_uri;
}
# This server will actually server your https content.
server {
# Listen for both IPv4 and IPv6 requests and activate http2.
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name www.example.com;
ssl on;
# Paths to certificates assuming you're using let's encrypt / certbot
ssl_certificate /etc/letsencrypt/live/www.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/www.example.com/privkey.pem;
# There's much more directives you should fine tune for https, but that's another task.
####
#
# Your server directives go here.
#
####
}