конфликт конфигурации двух сайтов в nginx

873
Patryk Dobrowolski

У меня настроен nginx для одного из моих доменов. Он работает как веб-интерфейс для сервера приложений Wildfly. Однажды я решил настроить среду бета-тестирования на той же машине. Поэтому я добавил еще один поддомен в конфигурацию. После перезапуска nginx перестал обслуживать первое приложение. Мои файлы конфигурации:

основной поддомен:

server { listen 80; server_name sub.example.com; return 301 https://$host$request_uri; }  server {  listen 443; server_name sub.example.com;  ssl_certificate /etc/nginx/ssl/bundle.crt; ssl_certificate_key /etc/nginx/ssl/sub.example.com.key;  ssl on; ssl_session_cache builtin:1000 shared:SSL:10m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4; ssl_prefer_server_ciphers on;  access_log /var/log/nginx/sub.example.com.access.log;  location / {  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_pass http://localhost:8080; proxy_read_timeout 90; } } 

тестовый поддомен:

server { listen 443; server_name sub-test.example.com; return 301 http://$host$request_uri; }  server {  listen 80; server_name sub-test.example.com;   access_log /var/log/nginx/sub-test.example.com.access.log;  location / {  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_pass http://localhost:8080; proxy_read_timeout 90;  } } 

Я должен добавить, что каждая из вышеперечисленных конфигураций работает как положено, когда в одиночку. Но вместе они не любят друг друга. Запрос на первый из них возвращает НЕ НАЙДЕННЫЙ статус HTTP.

Конечно, проблема может быть расположена на моем сервере Wildfly. Он настроен на обработку виртуальных хостов, и я не совсем уверен, что все в порядке. Но когда оба приложения запущены и nginx проксирует только одно из них, оно работает нормально.

Спасибо за помощь.

1
Вы не можете иметь более одного https-сервера на основе имени Romeo Ninov 8 лет назад 1
О, и это все? Ницца. Глупый я. :) Patryk Dobrowolski 8 лет назад 0
И вы добавили resolv для хостов sub-test.example.com и sub.example.com? Romeo Ninov 8 лет назад 0
Хорошо, удаление сервера https из второго субдомена мне помогло. Большое спасибо! Patryk Dobrowolski 8 лет назад 1
Пожалуйста, ответьте на мой вопрос, чтобы получить очки :) Patryk Dobrowolski 8 лет назад 0

2 ответа на вопрос

1
Romeo Ninov

Патрик, к сожалению, вы не можете установить более одного HTTPS-сервера на основе имени. Объяснения длинные, но вы можете проверить здесь некоторую незавершенную информацию и примеры (на основе Apache, понятия не имею о nginx)

Большое спасибо. Я слышал об этом, но забыл. А я просто программист, а не ежедневный менеджер серверов :) Patryk Dobrowolski 8 лет назад 1
0
itconlor

Вы можете использовать более одного сайта https.

Технология называется SNI, или индикация имени сервера. Ссылка

Перемещая часть ssl из конфигураций сервера, вы также уменьшаете чрезмерную нагрузку при настройке сертификатов. Я использую следующую структуру на своих обратных прокси:

sites.d/ | -ssl.conf | -vhost1.conf | -vhost2.conf

Затем ssl.conf содержит:

ssl_certificate /etc/ssl/certs/ssl.crt; ssl_certificate_key /etc/ssl/certs/server.key;

Другим вариантом будет использование отдельных сертификатов с разными общими именами.

На самом деле мне не нужно иметь два защищенных сайта на одном сервере. В моей конфигурации я сделал это только для перенаправления на незащищенное приложение. Может быть в будущем. Но спасибо за это. Patryk Dobrowolski 8 лет назад 0