From ae96bf59d625b8ad6230c70f1c78e8c9a317fa91 Mon Sep 17 00:00:00 2001 From: tradewind Date: Fri, 2 May 2025 18:01:37 +0800 Subject: [PATCH] Refactor Nginx config: improve proxy setup for Bitwarden with upstream directives, better WebSocket and HTTP/2 support; add Laravel template configuration. --- sites-available/bitwarden | 84 +++++++++++++++++++------------- sites-available/laravel_template | 34 +++++++++++++ 2 files changed, 85 insertions(+), 33 deletions(-) create mode 100644 sites-available/laravel_template diff --git a/sites-available/bitwarden b/sites-available/bitwarden index b4cb28a..989fe05 100644 --- a/sites-available/bitwarden +++ b/sites-available/bitwarden @@ -1,50 +1,68 @@ -# generated 2024-06-16, Mozilla Guideline v5.7, nginx 1.18.0, OpenSSL 3.0.2, modern configuration -# https://ssl-config.mozilla.org/#server=nginx&version=1.18.0&config=modern&openssl=3.0.2&guideline=5.7 +# The `upstream` directives ensure that you have a http/1.1 connection +# This enables the keepalive option and better performance +# +# Define the server IP and ports here. +upstream vaultwarden-default { + zone vaultwarden-default 64k; + server router.tradewind.vip:10060; + keepalive 2; +} + +# Needed to support websocket connections +# See: https://nginx.org/en/docs/http/websocket.html +# Instead of "close" as stated in the above link we send an empty value. +# Else all keepalive connections will not work. +map $http_upgrade $connection_upgrade { + default upgrade; + '' ""; +} + +# Redirect HTTP to HTTPS server { listen 80; listen [::]:80; + server_name bitwarden.tradewind.vip; - server_name bitwarden.tradewind.vip; - - location / { - return 301 https://$host$request_uri; - } + return 301 https://$host$request_uri; } server { - listen 443 ssl http2; - listen [::]:443 ssl http2; - - server_name bitwarden.tradewind.vip; - - # Allow large attachments - client_max_body_size 128M; - - location / { - resolver 223.5.5.5; - set $router "router.tradewind.vip"; - proxy_set_header Host $host; - proxy_redirect off; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_pass http://$router:10060; - } - + # For older versions of nginx appended http2 to the listen line after ssl and remove `http2 on` + listen 443 ssl; + listen [::]:443 ssl; +# http2 on; + server_name bitwarden.tradewind.vip; + # Specify SSL Config when needed ssl_certificate /etc/letsencrypt/live/tradewind.vip/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/tradewind.vip/privkey.pem; ssl_session_timeout 1d; ssl_session_cache shared:MozSSL:10m; # about 40000 sessions ssl_session_tickets off; - # modern configuration - ssl_protocols TLSv1.3; - ssl_prefer_server_ciphers off; + client_max_body_size 525M; - # HSTS (ngx_http_headers_module is required) (63072000 seconds) - add_header Strict-Transport-Security "max-age=63072000" always; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection $connection_upgrade; - # replace with the IP address of your resolver - resolver 223.5.5.5; -} + 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-Forwarded-Proto $scheme; + location / { + proxy_pass http://vaultwarden-default; + } + + # Optionally add extra authentication besides the ADMIN_TOKEN + # Remove the comments below `#` and create the htpasswd_file to have it active + # + #location /admin { + # # See: https://docs.nginx.com/nginx/admin-guide/security-controls/configuring-http-basic-authentication/ + # auth_basic "Private"; + # auth_basic_user_file /path/to/htpasswd_file; + # + # proxy_pass http://vaultwarden-default; + #} +} \ No newline at end of file diff --git a/sites-available/laravel_template b/sites-available/laravel_template new file mode 100644 index 0000000..17f049b --- /dev/null +++ b/sites-available/laravel_template @@ -0,0 +1,34 @@ +server { + listen 80; + server_name example.com; + root /example.com/public; + + add_header X-Frame-Options "SAMEORIGIN"; + add_header X-XSS-Protection "1; mode=block"; + add_header X-Content-Type-Options "nosniff"; + + index index.html index.htm index.php; + + charset utf-8; + + location / { + try_files $uri $uri/ /index.php?$query_string; + } + + location = /favicon.ico { access_log off; log_not_found off; } + location = /robots.txt { access_log off; log_not_found off; } + + error_page 404 /index.php; + + location ~ \.php$ { + fastcgi_split_path_info ^(.+\.php)(/.+)$; + fastcgi_pass unix:/var/run/php/php7.1-fpm.sock; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; + include fastcgi_params; + } + + location ~ /\.(?!well-known).* { + deny all; + } +} \ No newline at end of file