Правильно ли определять оба listen
(80 и 443) под тем же server {}
как это ?
Другой метод - определить два отдельных server{}
для каждого порта, который, как я знаю, будет в порядке.
server {
listen 80 default_server;
server_name example.com;
root /usr/share/nginx/html;
location / {
}
listen example.com:443 ssl; # <<< !!!
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
}
Разрешено прослушивать несколько портов одного и того же server
блок, но это зависит от вашей цели, если вы хотите это сделать.
Лично я использую следующую настройку, когда у меня есть следующий набор доменов и я хочу использовать https://www.example.com
в качестве основного домена:
http://example.com
https://example.com
http://www.example.com
https://www.example.com
server
блок для example.com
порты 80 и 443:
server {
server_name example.com;
listen 80;
listen 443 ssl http2;
ssl_certificate ...;
ssl_certificate_key ...;
return 301 https://www.example.com$request_uri;
}
это server
блок перенаправляет все запросы, поступающие в http://example.com
или https://example.com
к https://www.example.com
.
Тогда всего два блока для http://www.example.com
и https://www.example.com
:
server {
listen 80;
server_name www.example.com;
return 301 https://www.example.com$request_uri;
}
server {
listen 443 ssl;
server_name www.example.com;
ssl_certificate ...;
ssl_certificate_key ...;
... rest of config ...
}
Насколько я помню, да. Об этом также говорится в документации (ссылка ниже):
Единый сервер HTTP / HTTPS
Можно настроить один сервер, который будет обрабатывать запросы HTTP и HTTPS:
server { listen 80; listen 443 ssl; server_name www.example.com; ssl_certificate www.example.com.crt; ssl_certificate_key www.example.com.key; ... }
src: https://nginx.org/en/docs/http/configuring_https_servers.html