#nginx #dns #subdomain #openresty
Вопрос:
У меня есть openresty, работающий на моем экземпляре aws (экземпляр A), и ip-адрес сервера уже привязан к доменному имени myapp.john.com
.
Мое приложение работает на другом экземпляре aws (экземпляр B) в той же частной сети. У него есть частный ip-адрес 192.42.56.87
, и приложение работает на порту :80
.
Я хочу настроить свой openresty / nginx таким образом , чтобы при посещении prod.myapp.john.com
nginx указывал мне 192.42.56.87:80
. И при посещении test.myapp.john.com
nginx направляет меня к другому экземпляру (экземпляру C), на котором запущена тестовая версия моего приложения, скажем, на 192.xx.xx.xx:80
Ниже приведен код в (пример А):
Основной файл конфигурации /usr/local/openresty/nginx/conf/nginx.conf
определяется как:
# Main NGNX Config File
#user www-data;
worker_processes auto;
pid logs/nginx.pid;
error_log logs/error.log info;
error_log logs/error.log notice;
error_log logs/error.log debug;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log logs/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
keepalive_requests 100000;
resolver 8.8.8.8 valid=30s ipv6=off;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
ssl_prefer_server_ciphers on;
gzip on;
# Include all the sites for the domain
include /usr/local/openresty/nginx/sites/*;
}
/usr/local/openresty/nginx/sites/prod.myapp.john.com
определяется как:
server {
listen 80;
listen [::]:80;
server_name prod.myapp.john.com; // this does not work; but "myapp.john.com" works
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name prod.myapp.john.com; // this does not work; but "myapp.john.com" works
ssl_certificate /etc/letsencrypt/live/myapp.john.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/myapp.john.com/privkey.pem;
location / {
proxy_pass http://192.42.56.87:80/;
expires 0;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
}
}
Теперь, в браузере chrome , когда я посещаю prod.myapp.john.com
, ответа вообще нет, так как запрос никогда не попадает в мой экземпляр A;
Однако, если я изменюсь
server_name prod.myapp.john.com
Для
server_name myapp.john.com
это работает, и веб — страница отображается.
Почему? Как я могу включить больше файлов сайта /usr/local/openresty/nginx/sites/
и правильно настроить server
блоки в конфигурации, чтобы предоставить больше поддоменов на моем сайте?
Комментарии:
1. В чем заключается ошибка? Это 404 от nginx, 500 от nginx или может быть, вы просто не настроили поддомены в своем DNS? Если вы просто добавите
myapp.john.com
, DNS ничего не вернет*.myapp.john.com
…2. Глупая я. Я предполагал, что у меня есть DNS-запись поддомена с подстановочными знаками, но это не так.