2016-11-02 1 views
2

Wieder ein Nginx-Redirect-Problem. Ich brauche meine Website nur über https und immer mit Subdomain www (oder app oder api) zugänglich. Gibt es eine Möglichkeit die folgende Konfiguration zu akzeptieren https://example.com (ohne www)? Weil das ist, was ich gerade sehe, ohne in der Lage zu sein, zu erklären, warum ... Ich füge nur hinzu, dass es keinen anderen Serverabschnitt in der nginx-Konfiguration gibt.Nginx Weiterleitung an www

server { 
    listen 80; 
    server_name ~^(?<subdomain>www|app|api)\.example\.com$; 
    index index.html index.htm; 
    return   301 https://$subdomain.example.com$request_uri; 
} 
server { 
    listen 443 ssl; 
    server_name ~^(?<subdomain>www|app|api)\.example\.com$; 
    root /var/www/html/pathToMyWebsite; 
    index index.php; 
} 

Edit: Hier ist, was ich Dank am Ende mit @ivan:

# Redirects http://example.com & https://example.com to https://www.example.com 
server { 
    listen 80; 
    listen 443 ssl; # Here is the trick - listen both 80 & 443. 

    # other ssl related stuff but without "ssl on;" line. 

    server_name example.com; 
    return 301 https://www.example.com$request_uri; 
} 
server { 
    listen 80; 
    server_name ~^(?<subdomain>www|app|api)\.example\.com$; 
    index index.html index.htm; 
    return   301 https://$subdomain.example.com$request_uri; 
} 
server { 
    listen 443 default_server ssl; 
    server_name ~^(?<subdomain>www|app|api)\.example\.com$; 
    root /var/www/html/pathToMyWebsite; 
    index index.php; 
} 

Mitteilung der "default_server" Ich habe auf listen 443 default_server ssl;

Antwort

2

Zunächst einmal regexp in der nginx mit Config ist normalerweise keine gute Lösung. Fast immer ist es sinnvoller, Konfigurationsblöcke zu kopieren und einzufügen oder include Anweisungen zu verwenden, da regexp eine redundante Komplexität einführt. Natürlich ist es eine Art Handel, was zu verwenden ist.

Allerdings habe ich ziemlich das gleiche Nutzungsmuster in meiner configs:

# Redirects http://example.com & https://example.com to https://www.example.com 
server { 
    listen 80; 
    listen 443 ssl; # Here is the trick - listen both 80 & 443. 

    # other ssl related stuff but without "ssl on;" line. 

    server_name example.com; 
    return 301 https://www.example.com$request_uri; 
} 

# Redirects http://*.example.com to https://*.example.com 
server { 
    listen 80; 
    server_name ~^.+\.example\.com$; 
    return 301 https://$host$request_uri; 
} 

server { 
    listen 443; 
    server_name ~^.+\.example\.com$; 
    ssl on; 
    # ... 
} 
+0

ich am Ende eine Mischung aus Ihrer Lösung und Mine verwenden. Ich musste 'liste default_server 443;' setzen, weil ich diesen Fehler hatte "nein" ssl_certificate "ist definiert im Server auf SSL-Port während SSL-Handshake hören" – Axi

Verwandte Themen