安全優化(提高網站安全性配置)php
性能優化(提高用戶訪問網站效率)html
官方配置參數說明:http://nginx.org/en/docs/http/ngx_http_core_module.html#server_tokensnginx
官方參數:web
Syntax: server_tokens on | off | build | string; Default: server_tokens on; Context: http, server, location
配置舉例:vim
[root@web01 ~]# cat /application/nginx/conf/nginx.conf worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile off; keepalive_timeout 65; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; server { listen 80; server_name www.nmtui.com; server_tokens off; location / { root html/www; index index.html index.htm; } access_log logs/access_www.log main; } }
測試結果:安全
[root@web01 ~]# curl -I 10.0.0.8 HTTP/1.1 200 OK Server: nginx Date: Wed, 01 Nov 2017 18:32:40 GMT Content-Type: text/html Content-Length: 10 Last-Modified: Wed, 25 Oct 2017 01:20:56 GMT Connection: keep-alive ETag: "59efe6f8-a" Accept-Ranges: bytes
修改版本信息須要修改程序源文件信息性能優化
修改內核信息服務器
[root@web01 nginx-1.10.2]# vim src/core/nginx.h # ··· 13 #define NGINX_VERSION "1.0" 14 #define NGINX_VER "clsn/" NGINX_VERSION 22 #define NGINX_VAR "clsn" # ···
修改頭部信息cookie
[root@web01 nginx-1.10.2]# vim src/http/ngx_http_header_filter_module.c # ··· 49 static char ngx_http_server_string[] = "Server: clsn" CRLF; # ···
修改錯誤頁顯示網絡
[root@web01 nginx-1.10.2]# vim src/http/ngx_http_special_response.c # ··· # 此處能夠不修改 21 static u_char ngx_http_error_full_tail[] = 22 "<hr><center>" NGINX_VER "</center>" CRLF 23 "</body>" CRLF 24 "</html>" CRLF 25 ; # ··· 28 static u_char ngx_http_error_tail[] = 29 "<hr><center>clsn</center>" CRLF 30 "</body>" CRLF 31 "</html>" CRLF 32 ; # ···
修改完成後從新編譯
[root@web01 nginx-1.10.2]# ./configure --prefix=/application/nginx-1.10.2 --user=www --group=www --with-http_stub_status_module --with-http_ssl_module
重啓服務
[root@web01 nginx-1.10.2]# /etc/init.d/nginx restart
訪問測試是否修改爲功
[root@web01 ~]# curl -I 127.0.0.1 HTTP/1.1 200 OK Server: clsn Date: Wed, 01 Nov 2017 19:05:43 GMT Content-Type: text/html Content-Length: 10 Last-Modified: Wed, 25 Oct 2017 01:20:56 GMT Connection: keep-alive ETag: "59efe6f8-a" Accept-Ranges: bytes
第一種方法:利用編譯安裝配置參數,設定nginx默認worker進程用戶
useradd -s /sbin/nologin -M www ./configure --user=www --group=www
第二種方式:編寫nginx服務配置文件,設定nginx默認worker進程用戶
官方配置參數說明:http://nginx.org/en/docs/ngx_core_module.html#user
Syntax:user user [group]; Default: user nobody nobody; Context: main
配置舉例:
[root@web02 conf]# cat nginx.conf user www www; # 主區塊添加user參數 worker_processes 1; events { worker_connections 1024; }
查看是否生效
[root@web01 nginx-1.10.2]# ps -ef|grep nginx root 16987 1 0 15:14 ? 00:00:00 nginx: master process nginx clsn 18484 16987 0 15:22 ? 00:00:00 nginx: worker process root 18486 9593 0 15:22 pts/0 00:00:00 grep --color=auto nginx
默認語法說明:
syntax:client_max_body_size size; #<==參數語法 default:client_max_body_size 1m; #<==默認值是1m context:http,server,location #<==能夠放置的標籤段
舉例配置:
http { sendfile on; keepalive_timeout 65; client_max_body_size 8m; # 設置上傳文件最大值8M }
01. 根據目錄或擴展名,禁止用戶訪問指定數據信息
location ~ ^/images/.*\.(php|php5|sh|pl|py|html)$ { deny all; } location ~ ^/static/.*\.(php|php5|sh|pl|py)$ { deny all; } location ~* ^/data/(attachment|avatar)/.*\.(php|php5)$ { deny all; }
02. 當訪問禁止的數據信息時,進行頁面跳轉
Nginx下配置禁止訪問*.txt和*.doc文件。
實際配置信息以下:
location ~* \.(txt|doc)$ { if (-f $request_filename){ root /data/www/www; #rewrite …..能夠重定向到某個URL break; } } location ~* \.(txt|doc)${ root /data/www/www; denyall; }
03. 根據IP地址或網絡進行訪問策略控制
location / { deny 192.168.1.1; allow 192.168.1.0/24; allow 10.1.1.0/16; deny all; }
04. 採用if判斷方式,進行訪問控制
if ($remote_addr = 10.0.0.7 ){ return 403; }
第一種方式:配置一個server虛擬主機區塊,放置在全部server區塊最前面
server { listen 80; server_name - ; return 501; }
第二種方式:將計就計,經過你的域名訪問時候,自動跳轉到個人域名上
server { listen 80 default_server; server_name _; rewrite ^(.*) http://www.nmtui.com/$1 permanent; } if ($host !~ ^www\.nmtui\.com$) { rewrite ^(.*) http://www.nmtui.com/$1 permanent; }
什麼是資源盜鏈 ?
簡單地說,就是某些不法網站未經許可,經過在其自身網站程序裏非法調用其餘網站的資源,而後在本身的網站上顯示這些調用的資源,達到填充自身網站的效果。
實現盜鏈過程:
01. 真正的合法網站(盜鏈的目標) web01 www.nmtui.com www站點目錄有一個oldboy.jpg圖片
# 配置靜態虛擬主機 server { listen 80; server_name www.nmtui.com; location / { root html/www; index index.html index.htm; } # 確認生成盜鏈文件
02. 不合法的網站(真正盜鏈網站) www.daolian.com
# 編寫一個html盜鏈文件 <html> <head> <title>慘綠少年</title> </head> <body bgcolor=green> 慘綠少年的博客! <br>個人博客是 <a href="http://www.nmtui.com" target="_blank">博客地址 </a> <img src="http://www.nmtui.com/clsn.jpg"> </body> </html>
編寫盜鏈虛擬主機
server { listen 80; server_name www.daolian.org; location / { root html; index index.html index.htm; } }
至此就實現了盜鏈。
03 常見防盜鏈解決方案的基本原理
1) 根據HTTP referer實現防盜鏈
利用referer,而且針對擴展名rewrite重定向,下面的代碼爲利用referer且針對擴展名rewrite重定向,即實現防盜鏈的Nginx配置。
location ~* /\.(jpg|gif|png|swf|flv|wma|wmv|asf|mp3|mmf|zip|rar)$ { root html/www; valid_referers none blocked *.nmtui.com nmtui.com; if ($invalid_referer){ rewrite ^/ http://www.nmtui.com/img/nolink.jpg; } }
設置expires的方法以下:
[root@clsn www]# cat /application/nginx/conf/extra/www.conf server { listen 80; server_name www.nmtui.com; root html/www; index index.html index.htm; access_log logs/www_access.log main; #Preventing hot linking of images and other file types location ~* ^.+\.(gif|jpg|png|swf|flv|rar|zip)$ { valid_referers none blocked server_names *.nmtui.com nmtui.com; if ($invalid_referer){ rewrite ^/ http://www.nmtui.com/img/nolink.jpg; } access_log off; root html/www; expires 1d; break; } }
2) 根據cookie防盜鏈
3) 經過加密變換訪問路徑實現防盜鏈
4) 在全部網站資源上添加網站信息,讓盜鏈人員幫你作推廣宣傳
範例1:對錯誤代碼403實行本地頁面跳轉,命令以下:
###www server { listen 80; server_name www.nmtui.com; location / { root html/www; index index.html index.htm; } error_page 403 /403.html; #<==當出現403錯誤時,會跳轉到403.html頁面 }
# 上面的/403.html是相對於站點根目錄html/www的。
範例2:50x頁面放到本地單獨目錄下,進行優雅顯示。
# redirect server error pages to the static page /50x.html error_page 500 502 503 504 /50x.html; location = /50x.html { root /data0/www/html; }
範例3:改變狀態碼爲新的狀態碼,並顯示指定的文件內容,命令以下:
error_page 404 =200 /empty.gif; server { listen 80; server_name www.nmtui.com; location / { root /data0/www/bbs; index index.html index.htm; fastcgi_intercept_errors on; error_page 404 =200 /ta.jpg; access_log /app/logs/bbs_access.log commonlog; } }
範例4:錯誤狀態碼URL重定向,命令以下:
server { listen 80; server_name www.nmtui.com; location / { root html/www; index index.html index.htm; error_page 404 https://clsn.cnblogs.com; #<==當出現404錯誤時,會跳轉到指定的URL https://clsn.cnblogs.com頁面顯示給用戶,這個URL通常是企業另外的可用地址 access_log /app/logs/bbs_access.log commonlog; } }
服務器角色 |
權限處理 |
安全係數 |
動態Web集羣 |
目錄權限755 文件權限644 所用的目錄,以及文件用戶和組都是root |
環境爲Nginx+PHP 文件不能被改,目錄不能被寫入,安全係數10 |
static圖片集羣 |
目錄權限755 文件權限644 所用的目錄,以及文件用戶和組都是root |
環境爲Nginx 文件不能被改,目錄不能被寫入,安全係數10 |
上傳upload集羣 |
目錄權限755 文件權限644 所用的目錄,以及文件用戶和組都是root |
特別:用戶上傳的目錄設置爲755,用戶和組使用Nginx服務配置的用戶 文件不能被改,目錄不能被寫入,可是用戶上傳的目錄容許寫入文件且須要經過Nginx的其餘功能來禁止讀文件,安全係數8 |
範例1:阻止下載協議代理,命令以下:
## Block download agents ## if ($http_user_agent ~* LWP::Simple|BBBike|wget) { return 403; }
範例2:添加內容防止N多爬蟲代理訪問網站,命令以下:
這些爬蟲代理使用「|」分隔,具體要處理的爬蟲能夠根據需求增長或減小,添加的內容以下:
if ($http_user_agent ~* "qihoobot|Baiduspider|Googlebot|Googlebot-Mobile|Googlebot-Image|Mediapartners-Google|Adsbot-Google|Yahoo!Slurp China|YoudaoBot|Sosospider|Sogou spider|Sogou web spider|MSNBot") { return 403; }
#Only allow these request methods
if ($request_method !~ ^(GET|HEAD|POST)$ ) { return 501; }
#Do not accept DELETE,SEARCH and other methods
一、切換到普通用戶家目錄下,建立nginx所需文件
[nginx@web01 ~]$ mkdir -p blog/{conf,logs,html} [nginx@web01 ~]$ cd blog/ [nginx@web01 blog]$ cp /application/nginx/conf/nginx.conf.default ./conf/ [nginx@web01 blog]$ grep -vE "^$|#" conf/nginx.conf.default > conf/nginx.conf [nginx@web01 blog]$ cp /application/nginx/conf/mime.types conf/
二、編寫配置文件
[nginx@web01 ~]$ cat blog/conf/nginx.conf worker_processes 4; worker_cpu_affinity 0001 0010 0100 1000; worker_rlimit_nofile 65535; error_log /home/nginx/blog/logs/error.log; user inca inca; pid /home/nginx/blog/logs/nginx.pid; events { use epoll; worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; server { listen 8080; server_name www.etiantian.org; root /home/nginx/blog/html; location / { index index.html index.htm; } access_log /home/nginx/blog/logs/web_blog_access.log main; } }
注意:普通用戶不能使用知名端口,須要使用其餘端口啓動服務
三、檢查配置文件語法,並啓動nginx服務
/application/nginx/sbin/nginx -t -c /home/nginx/blog/conf/nginx.conf 或 /application/nginx/sbin/nginx -c /home/nginx/blog/conf/nginx.conf &>/dev/null &
注意:忽略一些不正確的輸出信息