Поддомен Nginx показывает то же самое Node.js приложение, которое домен делает

#node.js #nginx #subdomain

#node.js #nginx #поддомен

Вопрос:

Я довольно новичок в nginx, мне удалось запустить веб-сервер, и я могу получить доступ к своему Node.js приложение (порт 5000) в моем домене. Однако я хотел бы добавить поддомен для доступа к статическому веб-сайту. На данный момент с моей конфигурацией, если я перейду в свой поддомен, я увижу свой node.js применение.

Мои файлы конфигурации nginx внутри /etc/nginx/sites -доступны следующие:

  • По умолчанию
  • subdomain.example.com.conf

Конфигурация по умолчанию:

 server {
    root /var/www/html;
    index index.html index.htm index.nginx-debian.html;
    server_name example.com www.example.com; # managed by Certbot

    listen [::]:443 ssl ipv6only=on; # managed by Certbot                                    
    listen 443 ssl; # managed by Certbot                                                     
    ssl_certificate /etc/letsencrypt/live/www.example.com/fullchain.pem; # managed by Certbot  
    ssl_certificate_key /etc/letsencrypt/live/www.example.com/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot                    
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot


    location / {
       proxy_pass http://localhost:5000; #whatever port your app runs on
       proxy_http_version 1.1;
       proxy_set_header Upgrade $http_upgrade;
       proxy_set_header Connection 'upgrade';
       proxy_set_header Host $host;
       proxy_cache_bypass $http_upgrade;
    }
}
  

Конфигурация поддомена:

 server {

        listen 443 ssl;
        listen [::]:443 ssl;
        root sites/example;
        index test.example.com.html;
        server_name test.example.com www.test.example.com;
        ssl_certificate /etc/letsencrypt/live/www.example.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/www.example.com/privkey.pem;
        include /etc/letsencrypt/options-ssl-nginx.conf;                   
        ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

        location / {
                try_files $uri $uri/ =404;
        }
}
  

Как я могу видеть другой контент, отличный от моего Node.js приложение из моего поддомена?
Заранее благодарю вас.

Комментарии:

1. Используйте nginx -T (верхний регистр T ) для просмотра всей конфигурации во всех включенных файлах и убедитесь, что server блоки отображаются правильно server_name .

2. У вас нет никаких server блоков, прослушивающих порт 80? Как вы пытаетесь получить доступ к своему домену / поддомену через HTTP или через HTTPS?

3. @RichardSmith Каждое имя_сервера отличается, и они верны. @IvanShatsky В самом низу файла конфигурации по умолчанию есть server блок, который перенаправляет не-www и www на https (управляется Certbot). И он использует порт 80.

4. Вы не можете ссылаться на двух пользователей в одном комментарии, второй (то есть я) не получит уведомление о входящем сообщении, используйте два отдельных комментария, отвечающих двум пользователям. Если у вас есть только один server блок, прослушивающий порт 80, перенаправляющий HTTP-запросы в ваше приложение узла, это будет блок сервера по умолчанию для любого простого HTTP-запроса, перенаправляющего его в ваше приложение узла, независимо от того, какое Host значение заголовка HTTP, example.com или test.example.com . Прочитайте этот документ для получения подробной информации.

5. @IvanShatsky Я протестировал еще немного, и если бы я использовал только файл conf «по умолчанию», тогда он заработал. Однако моя цель — использовать несколько конфигураций (также будет лучше, если у меня будет больше доменов для использования). Также могу ли я слушать только 443 и при этом сайт по-прежнему работает корректно, только на HTTPS? Или правильный подход заключается в прослушивании обоих портов, а затем перенаправлении на HTTPS, если его порт 80?