mirror of
				https://github.com/internetstandards/toolbox-wiki.git
				synced 2025-11-03 23:35:28 +01:00 
			
		
		
		
	new
This commit is contained in:
		
							
								
								
									
										105
									
								
								under construction/Nginx-webserver-100%-example-config.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										105
									
								
								under construction/Nginx-webserver-100%-example-config.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,105 @@
 | 
				
			|||||||
 | 
					<img align="right" src="/images/logo-internetnl-en.svg">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Ngnix example configuration
 | 
				
			||||||
 | 
					This example configuration was created by SIDN Labs and show how to configure Ngnix in order to score 100% in the Website test on Internet.nl. 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Assumptions
 | 
				
			||||||
 | 
					* DNSSEC is used
 | 
				
			||||||
 | 
					* IPv6 is used
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Configuring Ngnix
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    server_tokens off;
 | 
				
			||||||
 | 
					    add_header X-Frame-Options SAMEORIGIN;
 | 
				
			||||||
 | 
					    add_header X-Content-Type-Options nosniff;
 | 
				
			||||||
 | 
					    add_header X-XSS-Protection "1; mode=block";
 | 
				
			||||||
 | 
					    add_header Strict-Transport-Security "max-age=31536000" always;
 | 
				
			||||||
 | 
					    add_header Content-Security-Policy "default-src 'self'; frame-ancestors 'none'" always;
 | 
				
			||||||
 | 
					    add_header Referrer-Policy "strict-origin" always;
 | 
				
			||||||
 | 
					     
 | 
				
			||||||
 | 
					    ssl_stapling on;
 | 
				
			||||||
 | 
					    ssl_stapling_verify on;
 | 
				
			||||||
 | 
					    ssl_trusted_certificate /etc/letsencrypt/live/example.nl/fullchain.pem;
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					    # Rate limiting 20 requests/s
 | 
				
			||||||
 | 
					    limit_req_zone $binary_remote_addr zone=mylimit:10m rate=20r/s;
 | 
				
			||||||
 | 
					     
 | 
				
			||||||
 | 
					    # http://example.nl -> https://example.nl
 | 
				
			||||||
 | 
					    server {
 | 
				
			||||||
 | 
					        listen 80;
 | 
				
			||||||
 | 
					        listen [::]:80;
 | 
				
			||||||
 | 
					        server_name example.nl;
 | 
				
			||||||
 | 
					     
 | 
				
			||||||
 | 
					        location /.well-known/acme-challenge/ {
 | 
				
			||||||
 | 
					            root /var/www/certbot;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					     
 | 
				
			||||||
 | 
					        location / {
 | 
				
			||||||
 | 
					            return 301 https://example.nl$request_uri;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					     
 | 
				
			||||||
 | 
					    # http://(www|api).example.nl -> https://(www|api).example.nl
 | 
				
			||||||
 | 
					    server {
 | 
				
			||||||
 | 
					        listen 80;
 | 
				
			||||||
 | 
					        listen [::]:80;
 | 
				
			||||||
 | 
					        server_name www.example.nl api.example.nl;
 | 
				
			||||||
 | 
					     
 | 
				
			||||||
 | 
					        return 301 https://$host$request_uri;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					     
 | 
				
			||||||
 | 
					    # https://example.nl -> https://www.example.nl
 | 
				
			||||||
 | 
					    server {
 | 
				
			||||||
 | 
					        listen 443 ssl http2;
 | 
				
			||||||
 | 
					        listen [::]:443 ssl http2;
 | 
				
			||||||
 | 
					        server_name example.nl;
 | 
				
			||||||
 | 
					     
 | 
				
			||||||
 | 
					        ssl_certificate /etc/letsencrypt/live/example.nl/fullchain.pem;
 | 
				
			||||||
 | 
					        ssl_certificate_key /etc/letsencrypt/live/example.nl/privkey.pem;
 | 
				
			||||||
 | 
					     
 | 
				
			||||||
 | 
					        ssl_session_cache shared:SSL:50m;
 | 
				
			||||||
 | 
					        ssl_session_timeout 1d;
 | 
				
			||||||
 | 
					        ssl_session_tickets on;
 | 
				
			||||||
 | 
					     
 | 
				
			||||||
 | 
					        ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
 | 
				
			||||||
 | 
					     
 | 
				
			||||||
 | 
					        ssl_protocols TLSv1.2 TLSv1.3;
 | 
				
			||||||
 | 
					        ssl_ciphers ECDH+AESGCM:ECDH+AES256:ECDH+AES128:DH+3DES:!ADH:!AECDH:!MD5;
 | 
				
			||||||
 | 
					        ssl_prefer_server_ciphers on;
 | 
				
			||||||
 | 
					     
 | 
				
			||||||
 | 
					        return 301 https://www.$host$request_uri;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					     
 | 
				
			||||||
 | 
					    # serve https://(www|api).example.nl
 | 
				
			||||||
 | 
					    server {
 | 
				
			||||||
 | 
					        listen 443 ssl http2;
 | 
				
			||||||
 | 
					        listen [::]:443 ssl http2;
 | 
				
			||||||
 | 
					        server_name www.example.nl api.example.nl;
 | 
				
			||||||
 | 
					     
 | 
				
			||||||
 | 
					        ssl_certificate /etc/letsencrypt/live/example.nl/fullchain.pem;
 | 
				
			||||||
 | 
					        ssl_certificate_key /etc/letsencrypt/live/example.nl/privkey.pem;
 | 
				
			||||||
 | 
					     
 | 
				
			||||||
 | 
					        ssl_session_cache shared:SSL:50m;
 | 
				
			||||||
 | 
					        ssl_session_timeout 1d;
 | 
				
			||||||
 | 
					        ssl_session_tickets on;
 | 
				
			||||||
 | 
					     
 | 
				
			||||||
 | 
					        ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
 | 
				
			||||||
 | 
					     
 | 
				
			||||||
 | 
					        ssl_protocols TLSv1.2 TLSv1.3;
 | 
				
			||||||
 | 
					        ssl_ciphers ECDH+AESGCM:ECDH+AES256:ECDH+AES128:DH+3DES:!ADH:!AECDH:!MD5;
 | 
				
			||||||
 | 
					        ssl_prefer_server_ciphers on;
 | 
				
			||||||
 | 
					     
 | 
				
			||||||
 | 
					        # Example location for a Flask application running on port 8080
 | 
				
			||||||
 | 
					        location / {
 | 
				
			||||||
 | 
					            limit_req zone=mylimit burst=100 nodelay;
 | 
				
			||||||
 | 
					     
 | 
				
			||||||
 | 
					            include uwsgi_params;
 | 
				
			||||||
 | 
					            uwsgi_pass flask:8080;
 | 
				
			||||||
 | 
					            uwsgi_ignore_client_abort on;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		Reference in New Issue
	
	Block a user