1、隱藏版本號
可以使用Fiddler工具抓取數據包,查看Nginx版本,也可以在CentOS中使用命令curl -I
http://192.168.10.23 顯示響應報文首部信息。
方法一:
方法一:修改配置文件方式
vim /usr/local/nginx/conf/nginx.conf
http {include mime.types;default_type application/octet-stream;server_tokens off; #添加,關閉版本號......
}systemctl restart nginx
curl -I http://192.168.17.155
方法二:
vim /opt/nginx-1.22.0/src/core/nginx.h
#define NGINX_VERSION "1.1.1" #修改版本號
#define NGINX_VER "IIS" NGINX_VERSION #修改服務器類型cd /opt/nginx-1.22.0/
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module \
--with-http_ssl_modulemakecp /opt/nginx-1.22.0/objs/nginx /usr/local/nginx/sbin/nginxvim /usr/local/nginx/conf/nginx.conf
http {include mime.types;default_type application/octet-stream;server_tokens on;......
}#重啟服務
systemctl restart nginx 一定要重啟
#測試
curl -I http://192.168.17.155
2、修改用戶與組
vim /usr/local/nginx/conf/nginx.conf
user nginx nginx; #取消注釋,修改用戶為 nginx ,組為 nginxsystemctl restart nginxps aux | grep nginx
主進程由root創建,子進程由nginx創建
3、緩存時間
----------------緩存時間-------------------
當Nginx將網頁數據返回給客戶端后,可設置緩存的時間,以方便在日后進行相同內容的請求
時直接返回,避免重復請求,加快了訪問速度一般針對靜態網頁設置,對動態網頁不設置緩存時間
?vim /usr/local/nginx/conf/nginx.conf
http {
...... server { ...... location / { root html; index index.html index.htm; } ? location ~ \.(gif|jpg|jepg|png|bmp|ico)$ { #加入新的 location,以圖片作為緩存對象 root html; expires 1d; #指定緩存時間,1天 }?
...... }}?
#重啟服務systemctl restart nginx
在Linux系統中,打開火狐瀏覽器,右擊點查看元素選擇 網絡 ---> 選擇 HTML、WS、其他 訪問
http://192.168.17.155/yjs805.png ,雙擊200響應消息查看響應頭中包含 Cahce-Control:
max-age=86400 表示緩存時間是 86400 秒。也就是緩存一天的時間,一天之內瀏覽器訪問這個頁
面,都是用緩存中的數據,而不需要向 Nginx 服務器重新發出請求,減少了服務器的使用帶寬。
4、日志切割
----------------日志切割-------------------
vim /opt/fenge.sh
#!/bin/bash
# Filename: fenge.sh
day=$(date -d "-1 day" "+%Y%m%d") #顯示前一天的時間
logs_path="/var/log/nginx"
pid_path="/usr/local/nginx/logs/nginx.pid"
[ -d $logs_path ] || mkdir -p $logs_path #創建日志文件目錄
mv /usr/local/nginx/logs/access.log ${logs_path}/kgc.com-access.log-$day
#移動并重命名日志文件
kill -USR1 $(cat $pid_path) #重建新日志文件
find $logs_path -mtime +30 -exec rm -rf {} \; #刪除30天之前的日志文件
#find $logs_path -mtime +30 | xargs rm -rf chmod +x /opt/fenge.sh
/opt/fenge.sh
ls /var/log/nginx
ls /usr/local/nginx/logs/access.log crontab -e
0 1 * * * /opt/fenge.sh
5、連接超時
----------------連接超時-------------------
HTTP有一個KeepAlive模式,它告訴web服務器在處理完一個請求后保持這個TCP連接的打開狀態。
若接收到來自同一客戶端的其它請求,服務端會利用這個未被關閉的連接,而不需要再建立一個連
接。KeepAlive 在一段時間內保持打開狀態,它們會在這段時間內占用資源。占用過多就會影響性能。vim /usr/local/nginx/conf/nginx.conf
http {
...... keepalive_timeout 65 180; 三次握手的超時時間client_header_timeout 80; 等待客戶端發送請求頭的超時時間會送408 錯誤client_body_timeout 80; 設置客戶端發送請求體的超時時間
......
}systemctl restart nginx
---------------------------------------------------------------------------------
#keepalive_timeout
指定KeepAlive的超時時間(timeout)。指定每個TCP連接最多可以保持多長時間,服務器將會在這
個時間后關閉連接。 Nginx的默認值是65秒,有些瀏覽器最多只保持 60 秒,所以可以設定為 60 秒。
若將它設置為0,就禁止了keepalive 連接。
第二個參數(可選的)指定了在響應頭Keep-Alive:timeout=time中的time值。這個頭能夠讓一些瀏覽
器主動關閉連接,這樣服務器就不必去關閉連接了。沒有這個參數,Nginx 不會發送 Keep-Alive 響應
頭。##client_header_timeout
客戶端向服務端發送一個完整的 request header 的超時時間。如果客戶端在指定時間內沒有發送一個
完整的 request header,Nginx 返回 HTTP 408(Request Timed Out)。###client_body_timeout
指定客戶端與服務端建立連接后發送 request body 的超時時間。如果客戶端在指定時間內沒有發送任
何內容,Nginx 返回 HTTP 408(Request Timed Out)。
6、更改進程數
----------------更改進程數-------------------
在高并發場景,需要啟動更多的Nginx進程以保證快速響應,以處理用戶的請求,避免造成阻塞?
cat /proc/cpuinfo | grep -c "physical id" #查看cpu核數
ps aux | grep nginx #查看nginx主進程中包含幾個子進程
?vim /usr/local/nginx/conf/nginx.confworker_processes 2; #修改為核數相同或者2倍
worker_cpu_affinity 01 10; #設置每個進程由不同cpu處理,進程數配為4時0001 0010 0100 1000?
systemctl restart nginx
7、配置網頁壓縮? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ? ?
----------------配置網頁壓縮-------------------
Nginx的ngx_http_gzip_module壓縮模塊提供對文件內容壓縮的功能
允許Nginx服務器將輸出內容在發送客戶端之前進行壓縮,以節約網站帶寬,提升用戶的訪問體驗,默認
已經安裝
可在配置文件中加入相應的壓縮功能參數對壓縮性能進行優化vim /usr/local/nginx/conf/nginx.conf
http {
...... gzip on; #取消注釋,開啟gzip壓縮功能gzip_min_length 1k; #最小壓縮文件大小gzip_buffers 4 64k; #壓縮緩沖區,大小為4個64k緩沖區gzip_http_version 1.1; #壓縮版本(默認1.1,前端如果是squid2.5請使用1.0)gzip_comp_level 6; #壓縮比率 1:壓縮比最小,速度最快;9:壓縮比最大,傳輸速度最快,但處理也最慢,也比較的消耗CPU資源 gzip_vary on; #支持前端緩存服務器存儲壓縮頁面gzip_types text/plain text/javascript application/x-javascript text/css text/xmlapplication/xml application/xml+rss image/jpg image/jpeg image/png image/gif application/x-httpd-php application/javascript application/json; #壓縮類型,表示哪些網頁文檔啟用壓縮功能
......
}cd /usr/local/nginx/html
先將game.jpg文件傳到/usr/local/nginx/html目錄下
vim index.html
......
<img src="game.jpg"/> #網頁中插入圖片
</body>
</html>systemctl restart nginx在Linux系統中,打開火狐瀏覽器,右擊點查看元素
選擇 網絡 ---> 選擇 HTML、WS、其他
訪問 http://192.168.17.155 ,雙擊200響應消息查看響應頭中包含 Content-Encoding: gzip
8、配置防盜鏈
Web源主機:192.168.17.155盜鏈網站主機:192.168.17.156Web源主機配置:
----------------配置防盜鏈-------------------
vim /usr/local/nginx/conf/nginx.conf
http {
......server {......location ~* \.(jpg|gif|swf)$ {valid_referers none blocked *.yjs0805.com yjs0805.com;if ( $invalid_referer ) {rewrite ^/ http://www.yjs0805.com/error.png;#return 403;}} ......}
}
-----------------------------------------------------------------------------
~* \.(jpg|gif|swf)$ :這段正則表達式表示匹配不區分大小寫,以.jpg 或.gif 或.swf 結尾的
文件;valid_referers :設置信任的網站,可以正常使用圖片;
none:允許沒有http_refer的請求訪問資源(根據Referer的定義,它的作用是指示一個請求是從哪
里鏈接過來的,如果直接在瀏覽器的地址欄中輸入一個資源的URL地址,那么這種請求是不會包含
Referer 字段的),如 http://www.yjs0805.com/game.jpg
我們使用 http://www.kgc.com 訪問顯示的圖片,可以理解成 http://www.yjs0805.com/game.jpg
這個請求是從 http://www.yjs0805.com 這個鏈接過來的。
blocked:允許不是http://開頭的,不帶協議的請求訪問資源;
*.yjs0805.com:只允許來自指定域名的請求訪問資源,如 http://www.yjs0805.comif語句:如果鏈接的來源域名不在valid_referers所列出的列表中,$invalid_referer為true,則
執行后面的操作,即進行重寫或返回 403 頁面。
---------------------------------------------------------------------------------網頁準備:
Web源主機(192.168.17.155)配置:
cd /usr/local/nginx/html
將game.jpg、error.png文件傳到/usr/local/nginx/html目錄下
vim index.html
<html>
<body>
<img src="game.jpg"/>
</body>
</html>echo "192.168.17.155 www.yjs0805.com" >> /etc/hosts
echo "192.168.17.156 www.zx0805.com" >> /etc/hosts 盜鏈網站主機(192.168.17.156):
cd /usr/local/nginx/html
vim index.html<html>
<body>
<img src="http://www.yjs0805.com/game.jpg"/>
</body>
</html>echo "192.168.17.155 www.yjs0805.com" >> /etc/hosts
echo "192.168.17.156 www.zx0805.com" >> /etc/hosts 在盜圖網站主機上進行瀏覽器驗證
http://www.zx0805.com
9、Nginx SSL/TLS配置
9.1 創建自簽名證書(僅用于測試環境)
如果您只是在開發或測試環境中使用 SSL,可以生成自簽名證書。請按照以下步驟生成并配置自簽名證書。
9.2 生成自簽名證書
1.生成密鑰文件和證書簽名請求(CSR):mkdir -p /usr/local/nginx/ssl/private
mkdir -p /usr/local/nginx/ssl/certs#生成私鑰文件
openssl genpkey -algorithm RSA -out /usr/local/nginx/ssl/private/nginx-
selfsigned.key -pkeyopt rsa_keygen_bits:2048
#生成csr文件
openssl req -new -key /usr/local/nginx/ssl/private/nginx-selfsigned.key -out
/usr/local/nginx/ssl/certs/nginx-selfsigned.csr其他字段說明(一般在用 openssl req -new -key ... 生成 CSR 時會問)Country Name (2 letter code): 國家代碼(必須 2 位,例如 CN、US)State or Province Name: 省/州全名,例如 BeijingLocality Name: 城市,例如 BeijingOrganization Name: 公司或組織名,例如 MyCompany LtdOrganizational Unit Name: 部門名,例如 IT Department(可留空)Common Name (e.g. server FQDN): 你的域名,例如 example.comEmail Address: 郵箱地址,例如 admin@example.com2.生成自簽名證書:
openssl x509 -req -days 365 -in /usr/local/nginx/ssl/certs/nginx-selfsigned.csr
-signkey /usr/local/nginx/ssl/private/nginx-selfsigned.key -out /usr/local
/nginx/ssl/certs/nginx-selfsigned.crt3.驗證證書生成是否成功:
證書應該已經保存在 /usr/local/nginx/ssl/certs/nginx-selfsigned.crt,
密鑰文件保存在 /usr/local/nginx/ssl/private/nginx-selfsigned.key。
9.3配置Nginx啟用SSL/TLS
vim /usr/local/nginx/conf/nginx.confserver {listen 443 ssl;server_name benet.com www.benet.com;ssl_certificate /usr/local/nginx/ssl/certs/nginx-selfsigned.crt;ssl_certificate_key /usr/local/nginx/ssl/private/nginx-selfsigned.key;ssl_protocols TLSv1.2 TLSv1.3;ssl_ciphers"EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH:TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256";ssl_prefer_server_ciphers on;location / {root /usr/share/nginx/html;index index.html;}
}解釋:listen 443 ssl:告訴 Nginx 監聽 HTTPS(端口 443)。
ssl_certificate和ssl_certificate_key:指定 SSL 證書和密鑰的路徑。
ssl_protocols TLSv1.2 TLSv1.3:只啟用 TLS 1.2 和 TLS 1.3,禁用 SSL 和 TLS 1.0/1.1。
ssl_ciphers:定義加密套件。可以根據安全需求選擇合適的加密方法。
ssl_prefer_server_ciphers on:強制服務器優先選擇加密套件。