[開發環境] 安裝 Nginx 並設定對應不同網域的站台 (以 Ubuntu 22.04 為例)
使用 APT 進行安裝 Nginx
- 更新 Ubuntu 系統的 apt 版本。
sudo apt update
- 查詢 nginx 官網提供可安裝的版本。
apt-cache madison nginx
- 安裝指定的版本,系統應該會詢問是否進續安裝,請輸入 y,並按照指示進行後續的動作,預設安裝完畢後,服務應該就已經啟動了。
sudo apt install nginx=1.18.0-6ubuntu14.4
- 確認 nginx 服務是否有在運行,若看到底下的畫面代表已啟動成功。
systemctl status nginx
設置防火牆(Configure Firewall)
目前沒有開防火牆,由路由器來卡控,有時間再來補實際的設定了。
安裝 Server Header 模組 (非必要)
- 因為標準版本無法移除 Server Header 若有需要可自行安裝外掛模組。
$ sudo apt install build-essential libpcre3-dev zlib1g-dev
- 下載與已安裝的 nginx 相同版本的 Source Code ,並且壓縮。
$ nginx -v # 1.18.0 $ wget http://nginx.org/download/nginx-1.18.0.tar. $ tar zxvf nginx-1.18.0.tar.gz $ rm nginx-1.18.0.tar.gz
- 下載 headers-more-nginx-module 原始碼。
$ sudo git clone https://github.com/openresty/headers-more-nginx-module
- 設置和建置 Nginx 動態模組,成功建置後會產生一個 ngx_http_modsecurity_module.so 檔案到 ~/nginx-1.18.0/objs 目錄底下。
$ cd ~/nginx-1.18.0 $ ./configure --add-dynamic-module=../headers-more-nginx-module --with-compat $ make modules
- 完成建置後,將模組移至 nginx 目錄底下。
$ sudo mkdir -p /etc/nginx/modules $ sudo cp objs/ngx_http_headers_more_filter_module.so /etc/nginx/modules # $ sudo cp objs/ngx_http_headers_more_filter_module.so /home/lawrence/NginxConfig/modules
- 將模組路徑設定到/etc/nginx/nginx.conf,但請小心放置的位置很重要,一定要在 event 上面,否則會收到 nginx: [emerg] "load_module" directive is specified too late in /etc/nginx/nginx.conf,的錯誤訊息。
include /etc/nginx/modules-enabled/*.conf; # Lawrence,載入外部模組 # ModSecurity # load_module /home/lawrence/NginxConfig/modules/ngx_http_headers_more_filter_module.so; load_module /etc/nginx/modules/ngx_http_headers_more_filter_module.so; events { ... }
- 完成安裝後,就可以設定移除標題等相關設定了。
# 禁用 server 標頭 more_clear_headers "server"; # 自訂 server 標頭 more_set_headers "server: lawrence";
Nginx 常用指令
nginx -v # 查看安裝的版本號碼 ex. nginx version: nginx/1.18.0 (Ubuntu)
sudo systemctl start nginx # 啟動服務
sudo systemctl stop nginx # 停止服務
sudo systemctl restart nginx # 重新啟動服務
sudo nginx -t # 檢查測試設定檔是否正確 /etc/nginx/nginx.conf
sudo systemctl reload nginx # 重新載入設定檔
sudo systemctl enable nginx # 開機自動啟動
sudo systemctl disable nginx # 關閉自動啟動
自定義設定檔
- 多站台設定,為了不要影響原本預設的參數設定,我把各站台的設定檔放在/home/lawrence/NginxConfig/cus_site_dev01.conf;,但實際上人別人應該不會放在這裡的路徑,視個人需求自行調整即可。
server { listen 80; server_name localhost.domain.com; location / { # 反向代理到另外一台主機的 1234 Port proxy_pass http://192.168.0.2:1234/; # 把 IP、Protocol 等 header 都一起送給反向代理的 server include /home/lawrence/NginxConfig/cus_proxy_headers.conf; } } server { listen 80; server_name localhost2.domain.com; server_name localhost3.domain.com; location / { # 反向代理到另外一台主機的 5678 Port proxy_pass http://192.168.0.3:5678; # 把 IP、Protocol 等 header 都一起送給反向代理的 server include /home/lawrence/NginxConfig/cus_proxy_headers.conf; } }
- Proxy 共用設定,/home/lawrence/NginxConfig/cus_proxy_headers.conf。
# 多個網域都共用測設定用 # 把 IP、Protocol 等 header 都一起送給反向代理的 server proxy_set_header Host $host; proxy_set_header Referer $http_referer; proxy_set_header X-Real-IP $remote_addr; # ARR 原本無此欄位 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Original-URL $request_uri; proxy_set_header X-Forwarded-By "PrimeEagleServer2"; # proxy_set_header X-ARR-SSL $ssl_protocol/$ssl_cipher; # 這個不確定要不要 # proxy_set_header X-ARR-LOG-ID $request_id; # proxy_redirect off;
- 將設定檔設定到 nginx.conf ,記得重新載入前先驗證設定檔是否正確。
nginx.conf 設定
預設設定檔路徑 /etc/nginx/nginx.conf。
user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;
events {
worker_connections 768;
# multi_accept on;
}
http {
##
# Basic Settings
##
sendfile on;
tcp_nopush on;
types_hash_max_size 2048;
# server_tokens off;
# server_names_hash_bucket_size 64;
# server_name_in_redirect off;
include /etc/nginx/mime.types;
default_type application/octet-stream;
##
# SSL Settings
##
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE
ssl_prefer_server_ciphers on;
##
# Logging Settings
##
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
##
# Gzip Settings
##
gzip on;
# gzip_vary on;
# gzip_proxied any;
# gzip_comp_level 6;
# gzip_buffers 16 8k;
# gzip_http_version 1.1;
# gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
##
# Virtual Host Configs
##
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
#mail {
# # See sample authentication script at:
# # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
#
# # auth_http localhost/auth.php;
# # pop3_capabilities "TOP" "USER";
# # imap_capabilities "IMAP4rev1" "UIDPLUS";
#
# server {
# listen localhost:110;
# protocol pop3;
# proxy on;
# }
#
# server {
# listen localhost:143;
# protocol imap;
# proxy on;
# }
#}
留言
張貼留言
您好,我是 Lawrence,這裡是我的開發筆記的網誌,如果你對我的文章有任何疑問或者有錯誤的話,歡迎留言讓我知道。