nginx config optimieren

Horst_33

Lieutenant
Registriert
Dez. 2008
Beiträge
684
Hi,

momentan betreibe ich auf einen Raspi 3 (192.168.178.131) folgende Dienste:

- SeaFile Server
- nginx als Webserver

- Shellinabox (erreichbar für nginx proxy)
- fail2ban (kommt noch)

Ein zweiter Pi (192.168.178.121) läuft im Netz und ist nur über den primären via Shell In a Box erreichbar.

Wichtig: Das haupt Merkmal liegt auf sicheren Diensten. HTTP wird via Lets Encrypt durchgesetzt und die sonstige Config vom nginx habe ich ziemlich restriktiv gesetzt. Kompatibilität zu alt Systemen sind dabei egal.

Nun habe ich aber folgendes Problem gehabt, wodurch mein ganzer Web Dienst nicht mehr erreichbar war: FI in der Wohnung gefallen -> FI wieder rein -> Raspi und FritzBox starten gleichzeitig hoch (FritzBox braucht mind. 1 Minute länger als der Pi) -> Fehler beim nginx (Details siehe später). Da kam meine Überlegung, dass die nginx config sicherlich optimiert werden könnte. Daher hier etliche Fragen zum nginx unter den genannten Gesichtspunkten

- Habt ihr Vorschläge zur Sicherheit
- Problem: Ist der andere raspi (192.168.178.121) nicht online, kann der andere pi (192.168.178.131 = der Pi mit den nginx) seinen webserver nicht starten -> Fail state, da der host nicht erreichbar ist/alternativ: dns-resolver nicht funktioniert hat -> Kann man das Problem abkoppeln?

- Sind mehrere einträge in /etc/nginx/sites-enabled sinnvoll?
- Wenn ja, wie teile ich diese auf?
- Sollte ich die Shell In a Box Sachen vom Seafile trennen?
- Kann ich mehrere Einträge in sites-enabeld verketten?

Hier die Config (einzige Datei):

Code:
# Basic HTTP Port for easy access                                                                                                           
server {                                                                                                                                    
        listen          80;                                                                                                                 
        server_name     foo.bar;                                                                                                         
        return          301 https://$host$request_uri;  #Redirect to HTTPS                                                                  
}                                                                                                                                           

# For major security reason use SSL at all time                                                                                             

server {                                                                                                                                    
        listen                  443;                                                                                                        
        ssl                     on;                                                                                                         
        ssl_certificate         /etc/letsencrypt/live/foo.bar/fullchain.pem;         # Pulbic Cert                                       
        ssl_certificate_key     /etc/letsencrypt/live/foo.bar/privkey.pem;           # Private Key                                       
        ssl_dhparam             /etc/nginx/ssl/dhparam4096.pem;                      # DH-Exchange Key                                   

        ssl_session_cache       builtin:1000 shared:SSL:10m;                                                                                
        ssl_protocols           TLSv1.2;                                                # TLSv1 TLSv1.1                                     


        # Only allow seucre cypher suites                                                                                                   
        ssl_ciphers             'kEECDH+ECDSA+AES128 kEECDH+ECDSA+AES256 kEECDH+AES128 kEECDH+AES256 kEDH+AES128 kEDH+AES256 HA !aNULL !eNUL
L !LOW !kECDH !DSS !MD5 !EXP !PSK !SRP !CAMELLIA !SEED';                                                                                    

        ssl_stapling on;                                                                                                                    
        ssl_prefer_server_ciphers on;                                                                                                       

        server_name             foo.bar;                                                                                                 
        proxy_set_header        X-Forwarded-For $remote_addr;                                                                               
                                                                                                                                            
        server_tokens           off;                                                                                                        
        add_header Strict-Transport-Security                                                                                                
                                "max-age=31536000; includeSubDomains";                                                                      
                                                                                                                                            
        # Make Cookies Secure                                                                                                               
        proxy_cookie_domain ~(?P<secure_domain>([-0-9a-z]+\.)?[-0-9a-z]+\.[a-z]+)$ "$secure_domain; secure";                                
                                                                                                                                            
        location / {                                                                                                                        
            fastcgi_pass    127.0.0.1:8000;                                                                                                 
            fastcgi_param   SCRIPT_FILENAME     $document_root$fastcgi_script_name;                                                         
            fastcgi_param   PATH_INFO           $fastcgi_script_name;                                                                       

            fastcgi_param   SERVER_PROTOCOL     $server_protocol;                                                                           
            fastcgi_param   QUERY_STRING        $query_string;                                                                              
            fastcgi_param   REQUEST_METHOD      $request_method;                                                                            
            fastcgi_param   CONTENT_TYPE        $content_type;                                                                              
            fastcgi_param   CONTENT_LENGTH      $content_length;                                                                            
            fastcgi_param   SERVER_ADDR         $server_addr;                                                                               
            fastcgi_param   SERVER_PORT         $server_port;                                                                               
            fastcgi_param   SERVER_NAME         $server_name;                                                                               
            fastcgi_param   REMOTE_ADDR         $remote_addr;                                                                               
            fastcgi_param   HTTPS               on;                                                                                         
            fastcgi_param   HTTP_SCHEME         https;                                                                                      

            access_log                  /var/log/nginx/seahub.access.log;                                                                   
            error_log                   /var/log/nginx/seahub.error.log;                                                                    
            fastcgi_read_timeout        36000;                                                                                              
        }                                                                                                                                   

# Redirect location for seafile                                                                                                             
                                                                                                                                            
   location /seafhttp {                                                                                                                     
            rewrite ^/seafhttp(.*)$ $1 break;                                                                                               
            proxy_pass http://127.0.0.1:8082;                                                                                               
            client_max_body_size 0;                                                                                                         
            proxy_connect_timeout       36000s;                                                                                             
            proxy_read_timeout          36000s;                                                                                             
            proxy_send_timeout          36000s;                                                                                             
            send_timeout                36000s;                                                                                             
        }                                                                                                                                   

# Location to data directory                                                                                                                

   location /media {                                                                                                                        
            root /mnt/pidrive/seafile/seafile-server-latest/seahub;                                                                         
        }                                                                                                                                   


# Securing Shell in A Box via SSL Proxy and HTPASSWD                                                                                        

   location /shellinabox/31/ {                                                                                                              
            proxy_pass                  http://192.168.178.131:4200;                                                                        

            access_log                  /var/log/nginx/shellinabox31.access.log;                                                            
            error_log                   /var/log/nginx/shellinabox31.error.log;                                                             
            auth_basic                  "Restricted";                                                                                       
            auth_basic_user_file        /etc/nginx/htpasswd;                                                                                
        }                                                                                                                                   


   location /shellinabox/21/ {                                                                                                              
            proxy_pass                  http://192.168.178.121:4200;                                                                        

            access_log                  /var/log/nginx/shellinabox21.access.log;                                                            
            error_log                   /var/log/nginx/shellinabox21.error.log;                                                             
            auth_basic                  "Restricted";                                                                                       
            auth_basic_user_file        /etc/nginx/htpasswd;                                                                                
        }                                                                                                                                   

# For Let´s encrypt acme challenge (renew)                                                                                                  

    location '/.well-known/acme-challenge' {                                                                                                
                default_type    "Text/plain";                                                                                               
                root            /var/www/webroot;                                                                                           
        }                                                                                                                                   

}
 
Soweit ich rauslese, ist dein Problem, wenn der FI fällt, dass der Pi länger braucht beim Booten als die Fritz?

Du schreibst nicht welches OS du hast aber nachdem ich /etc/nginx/sites-enabled gelesen habe, denke ich mal, dass es sich hierbei um ein Debian handelt?
Wenn ja, kannst du dem Systemd Dienst (nginx, dns-resolver usw..) ein wenig aufbohren und dort die Anzahl der Restart, sowie den Timeout definieren.



- Sind mehrere einträge in /etc/nginx/sites-enabled sinnvoll?

Ansichstsache, es ist halt einfach ordentlicher. Nginx Config Split


- Wenn ja, wie teile ich diese auf?
Siehe oben

- Sollte ich die Shell In a Box Sachen vom Seafile trennen?
Ansichtssache.

- Kann ich mehrere Einträge in sites-enabeld verketten?
wieder oben :)
 
dalini schrieb:
Soweit ich rauslese, ist dein Problem, wenn der FI fällt, dass der Pi länger braucht beim Booten als die Fritz?
Du schreibst nicht welches OS du hast [...]
Wenn ja, kannst du dem Systemd Dienst (nginx, dns-resolver usw..) ein wenig aufbohren und dort die Anzahl der Restart, sowie den Timeout definieren.

Das Problem ist anders herum: Die FritzBox braucht deutlich länger als die PIs, wodurch ein dnslookup/resolve vom Pi1 auf Pi2 nicht möglich ist (der dns server is ja noch am booten).

OS: Raspbian (Debain) Jessie

Das mit den Splitting und dem Time-Out werd ich mir heute mal anschauen. Danke für die Infos :)
 
Zurück
Oben