nginx Konfigurationskonflikt mit zwei Standorten

948
Patryk Dobrowolski

Ich habe Nginx für eine meiner Domains konfiguriert. Es funktioniert als Frontend für den Wildfly-Anwendungsserver. Eines Tages entschied ich mich, die Beta-Testumgebung auf demselben Rechner zu konfigurieren. Also habe ich eine weitere Subdomain zur Konfiguration hinzugefügt. Nach dem Neustart wurde Nginx gestoppt, um die erste Anwendung bereitzustellen. Meine Konfigurationsdateien sind:

Haupt-Subdomain:

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; } } 

test subdomain:

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;  } } 

Ich muss hinzufügen, dass jede der obigen Konfigurationen wie erwartet funktioniert, wenn sie alleine ist. Aber zusammen mögen sie sich nicht. Das Anfordern des ersten von ihnen gibt den HTTP-Status NICHT GEFUNDEN zurück.

Natürlich liegt das Problem möglicherweise auf meinem Wildfly-Server. Es ist für die Verarbeitung von virtuellen Hosts konfiguriert und ich bin nicht wirklich sicher, ob es in Ordnung ist. Wenn jedoch beide Anwendungen ausgeführt werden und nur eine davon von nginx weitergeleitet wird, funktioniert dies einwandfrei.

Danke für die Hilfe.

1
Sie können nicht mehr als einen namenbasierten https-Server haben Romeo Ninov vor 8 Jahren 1
Oh, und das ist es? Nett. Ich Idiot. :) Patryk Dobrowolski vor 8 Jahren 0
Und haben Sie resolv für die Hosts sub-test.example.com und sub.example.com hinzugefügt? Romeo Ninov vor 8 Jahren 0
Ok, das Entfernen von https-Server aus der zweiten Subdomain hat für mich funktioniert. Danke vielmals! Patryk Dobrowolski vor 8 Jahren 1
Bitte beantworten Sie meine Frage, um einige Punkte zu sammeln :) Patryk Dobrowolski vor 8 Jahren 0

2 Antworten auf die Frage

1
Romeo Ninov

Patryk, leider können Sie nicht mehr als einen namenbasierten HTTPS-Server festlegen. Die Erklärungen sind lang, aber Sie können hier nach unabhängigen Informationen und Beispielen suchen (Apache-basiert, keine Ahnung von Nginx)

Danke vielmals. Ich habe davon gehört, aber vergessen. Und ich bin nur Programmierer, nicht jeden Tag Server Manager :) Patryk Dobrowolski vor 8 Jahren 1
0
itconlor

Sie können mehr als eine https-Site verwenden.

Die Technologie wird als SNI oder Servername bezeichnet. Referenz

Durch das Verschieben des SSL-Teils aus den Serverkonfigurationen reduzieren Sie auch den Aufwand für die Konfiguration der Zertifikate. Ich benutze die folgende Struktur für meine umgekehrten Proxies:

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

ssl.conf enthält dann:

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

Eine andere Option wäre die Verwendung separater Zertifikate mit unterschiedlichen allgemeinen Namen.

Eigentlich brauche ich nicht zwei sichere Sites auf einem Server. In meiner Konfiguration habe ich es nur getan, um zur unsicheren Anwendung umzuleiten. Vielleicht in der Zukunft. Aber danke dafür. Patryk Dobrowolski vor 8 Jahren 0