# Simple Directory Index configuration
server {
listen 80;
server_name www.example.com;
root /var/www/html;
location / {
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
charset utf-8;
}
}
# HTTP Proxy
resolver 8.8.4.4;
server {
listen 3128;
location / {
proxy_pass http://$http_host$request_uri;
}
}
# Reverse Proxy
server {
listen 80;
server_name new-site.com;
location / {
proxy_pass http://origin-site.com/;
proxy_redirect default;
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-Forward-IP $remote_addr;
port_in_redirect on;
server_name_in_redirect off;
proxy_connect_timeout 300;
}
}
# Cached Reverse Proxy
Make directories for cache:
mkdir -p /var/cache/nginx/cache
mkdir -p /var/cache/nginx/temp
Paste below log_format
directive in nginx.conf
:
client_body_buffer_size 512k;
proxy_connect_timeout 5;
proxy_read_timeout 60;
proxy_send_timeout 5;
proxy_buffer_size 16k;
proxy_buffers 4 64k;
proxy_busy_buffers_size 128k;
proxy_temp_file_write_size 128k;
proxy_temp_path /var/cache/nginx/temp;
proxy_cache_path /var/cache/nginx/cache levels=1:2 keys_zone=cache_one:500m inactive=7d max_size=30g;
Add to vhost configuration:
proxy_cache cache_one;
proxy_cache_valid 200 304 3d;
proxy_cache_key $host$uri$is_args$args;
expires 10d;
# Reverse proxy pass to a subdirectory (Map domain root to sub-path)
server {
listen 80;
server_name www.example.com;
location / {
proxy_pass http://sub.example.com/path;
sub_filter /path/ /; # You may need this, otherwise comment it out.
proxy_redirect off;
}
}
# Set Expires Headers For Static Content
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
expires 1y;
log_not_found off;
}
# Increase HTTP Post Size Limit
http {
#...
client_max_body_size 100m;
#...
}
# Set Correct Files/Folders Permissions
chown -R www-data:www-data .
find . -type f -exec chmod 644 {} \;
find . -type d -exec chmod 755 {} \;
# Setup Basic-Auth on NGINX
Install apache2-utils
apt-get install apache2-utils
Create User and Password
htpasswd -c /etc/nginx/.htpasswd exampleuser
Add to NGINX site config
server {
...
location / {
...
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/.htpasswd; #For Basic Auth
}
}
# NGINX with SSL
listen 443 ssl;
ssl_certificate /etc/nginx/server.crt;
ssl_certificate_key /etc/nginx/server.key;
ssl_protocols TLSv1.2 TLSv1.1 TLSv1;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !RC4";
keepalive_timeout 70;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
Concatenate certificates via cat
cat domain.crt intermediate.pem rootCA.pem > domain.signed.crt
Avoid using SHA-1 as key exchange method, use Diffie Hellman Ephemeral parameters.
cd /etc/ssl/certs
openssl dhparam -out dhparam.pem 4096 # use 2048 if you are on a low-end-box.
Then tell nginx to use it for DHE key-exchange:
ssl_dhparam /etc/ssl/certs/dhparam.pem;
# Redirect to HTTPS
location / {
return 301 https://example.com$request_uri;
}
# HSTS
add_header Strict-Transport-Security max-age=63072000;
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
# CORS Config
Add the following to location
block with proper options.
add_header 'Access-Control-Allow-Origin' "*";
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'Accept,Authorization,Cache-Control,Content-Type,DNT,If-Modified-Since,Keep-Alive,Origin,User-Agent,X-Mx-ReqToken,X-Requested-With';
If you get errors like ... from origin 'https://...' has been blocked from loading by Cross-Origin Resource Sharing policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
, try to change value of Access-Control-Allow-Origin
to specific domains.
add_header 'Access-Control-Allow-Origin' "example.com static.example.com";
# Enable Certificate Transparency for DV certificates
Reference:
Last Update 2016/10/14 17:32:01 +0900