#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?