Как мне назвать свой сервер в nginx, если у меня есть сервер перенаправления и основной сервер?

Как мне назвать свой сервер в nginx, если у меня есть сервер перенаправления и основной сервер?

Предположим, что мой основной сервер должен обслуживать, https://www.example.comа сервер перенаправления — перенаправлять http://www.example.comна https://www.example.com. Как мне назвать эти два сервера? Есть ли какая-то лучшая практика для этого?

Является ли имя сервера в основном личным предпочтением, так что я могу назвать что угодно?

решение1

Они оба должны быть названы www.example.com. Это имя часто на самом деле очень важно, потому что если вы размещаете более одного виртуального хоста на одном IP-адресе, nginxбудет использовать имя для сопоставления vhost, который должен обрабатывать запрос, с тем, который указан в Hostзаголовке http-запроса. В вашем случае с двумя vhost, но разными протоколами (http/https), протокол (или, скорее, Listenпорт) будет использоваться для дальнейшего различия между двумя vhost.

решение2

Имена серверов являются важной частью конфигурации nginx. Если вы обслуживаете несколько доменов/поддоменов с сервера с одним публичным IP-адресом, директива server_nameсообщает nginx, какой сервер должен отвечать на запрос. Если нет соответствующего имени сервера, nginx будет искать сервер по умолчанию, который, если он есть, будет действовать как своего рода сервер «catch all».

Вотпример конфигурациидля перенаправления http -> https, где вы также можете увидеть, как правильно называть серверы, не получая ошибок.

/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.
        #
        ####
}

Связанный контент