Eduard Prezer Logo
DJ Fotografie Über mich Links Blog Gästebuch Impressum

nginx als Reverseproxy

Besitzt man nur eine öffentliche IP-Adresse und möchten mehrere Webseiten/Web-Applikationen über diese bereitstellen, kommt man an einem Reverse Proxy nicht vorbei. Eine einfache und schlanke Lösung bietet hier der nginx Webserver.

In diesem Beispiel Betreiben wir zwei Subdomains mit jeweils eigenen SSL Zertifikaten. Beide stellen über Port 443 Web-Applikationen bereit. Der nginx Server übernimmt hierbei auch die SSL-Verschlüsselung (SSL-Offloading). Die Server sind in diesem Beipiel im internen Netz über 192.168.0.8 Port 80 und 192.168.0.9 Port 8080 erreichbar.

Die nachfolgende nginx Konfiguration ist unter Beachtung der mit # vorangeführten Kommentaren selbsterklärend.

# Ein Listener auf Port 80 sorgt dafür, dass Anfragen an http automatisch über ein HTTP 301 an https umgeitet werden
server {                                                                                                                         
        listen 80;                                                                                                               
        server_name app1.domain.tld app2.domain.tld;  # Hier sind alle betriebenen Domains/Subdomains einzutragen. Auch eine Wildcard *.domain.de ist möglich.
        return 301 https://$server_name$request_uri;                                                        
      }                                                                                                                                 
# Web-Applikation 1
server {                                                                                                                          
        listen 443 ssl;                                                                                 
        server_name app1.domain.tld; # Domain für die erste Web-Applikation  

        ssl on;  
        ssl_certificate /usr/local/etc/nginx/openssl/certs/app1.domain.tld.combo.pem; # Zertifikatsbundle für erste Web-Applikation           
        ssl_certificate_key /usr/local/etc/nginx/openssl/private/app1.domain.tld.nopass.key; #Zertifikatsschlüssel für erste WebApplikation        
       
        # Manche Web-Applikationen leiten einen auf http:// um. Die nachfolgende Anweisung leitet http:// anfragen an Port 443 auf https:// um
        error_page 497 = https://$server_name:$server_port$request_uri;  

        location /  
               {          
                proxy_set_header X-Real-IP  $remote_addr;   
                proxy_set_header X-Forwarded-For $remote_addr;  
                proxy_set_header Host $host;  
                proxy_pass http://192.168.0.8:80; # Interne IP und Port   
               }
# Web-Applikation 2
server { 
        listen 443 ssl; 
        server_name app2.domain.tld; # Domain für die erste Web-Applikation

        ssl on; 
        ssl_certificate /usr/local/etc/nginx/openssl/certs/app2.domain.tld.combo.pem; # Zertifikatsbundle für zweite Web-Applikation 
        ssl_certificate_key/usr/local/etc/nginx/openssl/private/app2.domain.tld.nopass.key; #Zertifikatsschlüssel für zweite WebApplikation# Manche Web-Applikationen leiten einen auf http:// um. Die nachfolgende Anweisung leitet http:// anfragen an Port 443 auf https:// um
        error_page 497 = https://$server_name:$server_port$request_uri;
                         
        location /                           
               {                               
                proxy_set_header X-Real-IP  $remote_addr;    
                proxy_set_header X-Forwarded-For $remote_addr;   
                proxy_set_header Host $host;                    
                proxy_pass http://192.168.0.9:8080; # Interne IP und Port  
               }                                        
}