Nginx服务应用
虛擬主機
基于域名的虛擬主機
所謂基于域名的虛擬主機,意思就是通過不同的域名區分不同的虛擬主機,基于域名的虛擬主機是企業應用最廣的虛擬主機類型,幾乎所有對外提供服務的網站都是使用基于域名的虛擬主機
基于端口的虛擬主機
基于端口的虛擬主機,意思就是通過不同的端口來區分不同的虛擬主機,此類虛擬主機對應的企業應用主要為公司內部的網站
基于IP的虛擬主機
基于IP的虛擬主機,意思就是通過不同的IP區分不同的虛擬主機
基于域名虛擬主機配置
在主配文件http模塊里加入?
include extra/www.conf; #加入此項表示當服務器被訪問時在extra下找對應的server配置文件 服務端不需要server配置 include extra/mail.conf; include extra/status.conf;在conf下創建extra目錄
mkdir /usr/local/nginx/conf/extra在extra下建立對應的server配置文件
vim /usr/local/nginx/conf/extra/www.conf#以下為www.conf的配置內容 其他2項略 server {listen 80; server_name www.wk.com;location / {root /var/www/html/wwwcom;index index.html index.htm;}error_page 500 502 503 504 /50x.html;location = /50x.html {root /var/www/html;}}
根據不同的server配置建立不同的網頁目錄
mkdir -p /var/www/html/wwwcom #在目錄下放入對應的網頁文檔即可訪問虛擬主機別名
實現多個域名可以訪問一個虛擬主機
server {listen 80;server_name www.wk.com wk.com www.hehe.com; #server_name配置多個域名即可location / {root /var/www/html/wwwcom;index index.html index.htm;}error_page 500 502 503 504 /50狀態功能模塊
確認編譯時是否設定了此模塊
--with-http_stub_status_module模塊就是狀態信息模塊
/usr/local/nginx/sbin/nginx -V nginx version: nginx/1.14.0 built by gcc 4.4.7 20120313 (Red Hat 4.4.7-23) (GCC) built with OpenSSL 1.0.1e-fips 11 Feb 2013 TLS SNI support enabled configure arguments: --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module設定信息模塊配置
新建一個server端顯示信息功能模塊
?
server{listen 80;server_name status.wk.com;location / {stub_status on; #開啟狀態信息功能access_log off; #不記錄訪問日志}狀態信息模塊配置方式和搭建虛擬網站類似需要占用一個域名來訪問 狀態信息模塊設置訪問權限防止外部用戶查看。
顯示結果
Active connections: 2 #表示Nginx正在處理的活動連接2個 server accepts handled requests 39 39 41 Reading: 0 Writing: 1 Waiting: 1server表示Nginx啟動到現在一共處理了39個連接 accepts表示Nginx啟動到現在共成功創建了39次握手 ?handled requests,表示總共處理了41次請求
Reading為Nginx讀取到客戶端的Header信息數? Writing為Nginx返回給客戶端的Header信息數? Waiting為Nginx已經處理完正在等候下一次請求指令的駐留連接
增加錯誤日志
范例:error_log file level;
常見的日志級別【debug|info|notice|warn|error|crit|alert|emerg】?
生產場景一般是warn|error|crit這三個級別之一,注意不要配置info等較低級別,會帶來巨大磁盤I/O消耗。?
error_log的默認值為:?
# default:error_log logs/error.log error;
Nginx訪問日志輪詢切割
此功能由ngx_http_log_module模塊負責
控制參數:
log_format #用來定義記錄日志的格式可定義多種格式取不同的名字
access_log #用來指定日志文件的路徑及使用何種日志的格式記錄日志
nginx日志格式中默認的參數
log_format main '$remote_addr - $remote_user [$time_local] "$request" ' #log_format格式參數以記名字'$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"'; access_log logs/access.log main; #以main格式記錄日志存放在logs/access.log里nginx日志變量格式說明
$remote_addr #記錄訪問網站的客戶端地址
$http_ x_forwarded for #當前端有代理服務器時,設置Web節點記錄客戶端地址的配置,此參數效的前提是代理服務器上也進行了相關的x forwarded for 設置
$remote_user #遠程客戶端用戶名稱
$time_local #記錄訪問時間與時區
$request #用戶的http請求起始行信息
$status #http 狀態碼,記錄請求返回的狀態,例如: 200、404、301等
$body_bytes_sents #服務器發送給客戶端的響應body字節數
$http_feferer #記錄此次請求是從哪個鏈接訪問過來的,可以根據referer進行防盜鏈設置
$http_user agent #記錄客戶端訪問信息,例如:瀏覽器、手機客戶端等
日志切割
默認情況下Nginx會把所有的訪問日志生成到一個指定的訪問日志文件access.log里,但這樣一來,時間長了就會導致日志個頭很大,不利于日志的分析和處理,因此,有必要對Nginx日志,按天或按小時進行切割,使其分成不同的文件保存。
#切割腳本見博文 nginx安裝應用
Nginx location
location使用的語法為:
location [ = | ~ | ~* | ^~ ] uri {... }上述語法中的URI部分是關鍵,這個URI可以是普通的字符串地址路徑,或者是正則表達式,匹配成功則執行后面大括號里的相關命令。正則表達式的前面還可以有“~”或“~*”等特殊字符。
匹配這兩種特殊字符“~”或“~*”的區別為:“~”用于區分大小寫(大小寫敏感)的匹配;“~*”用于不區分大小寫的匹配。還可以用邏輯操作符“!”對上面的匹配取反,即“!~”和“!~*”。此外,“^~”的作用是先進行字符串的前綴匹配(必須以后邊的字符串開頭),如果能匹配到,就不再進行其他location的正則匹配了。
?
| 1 | " location = / { " | 精確匹配 |
| 2 | " location ^~ /images/ { " | 先進行字符串的前綴匹配,如果匹配到就不做正則匹配檢查 |
| 3 | " loction ~* \.(gif | jpg | jpeg)$ { " | 正則匹配,*為不區分大小寫 |
| 4 | " location /documents/ { " | 匹配常規字符串,模糊匹配,如果有正則檢查,正則優先 |
| 5 | " location / { " | 所有location都不能匹配后的默認匹配原則 |
?
Nginx rewrite
rewrite指令語法
指令語法:rewrite regex replacement 【flag】;?
默認值:none?
應用位置:server,location,if?
rewrite是實現URL重寫的關鍵指令,根據regex(正則表達式)部分的內容,重定向到replacement部分,結尾是flag標記。下面是一個簡單的URL rewrite跳轉例子:
rewrite ^/(.*) http://www.baidu.com/$1 permanent;rewrite為固定關鍵字,表示開啟一條rewrite匹配規則,regex部分是^(.*),這是一個正則表達式,表示匹配所有,匹配成功后跳轉到http://www.baidu.com/。這里的1是取前面regex部分括號里的內容,結尾的permanent;是永久301重定向標記,即跳轉到后面的http://www.baidu.com/$1?地址上。
regex常用正則表達式
rewrite指令的最后一項參數flag標記的說明
- 在以上的flag標記中,last和break用來實現URL重寫,瀏覽器地址欄的URL地址不變,但在服務器端訪問的程序及路徑發生了變化。redirect和permanent用來實現URL跳轉,瀏覽器地址欄會顯示跳轉后的URL地址。
- last和break標記的實現功能類似,但二者之間有細微的差別,使用alias指令時必須用last標記,使用proxy_pass指令時要使用break標記。last標記在本條rewrite規則執行完畢后,會對其所在的server{...}標簽重新發起請求,而break標記則會在本條規則匹配完成后,終止匹配,不再匹配后面的規則。
Nginx的rewrite功能在企業里應用
- 可以調整用戶瀏覽的URL,使其看起來更規范,合乎開發及產品人員的需求。
- 為了讓搜索引擎收錄網站內容,并讓用戶體驗更好,企業會將動態URL地址偽裝成靜態地址提供服務
- 網站換新域名后,讓舊域名的訪問跳轉到新的域名上,例如:讓京東的360buy換成了jd.com
- 根據特殊變量,目錄,客戶端的信息進行URL跳轉等。
?
server{listen 80;server_name wk.com;rewrite ^/(.*) http://www.wk.com/$1 permanent; #當用戶訪問wk.com及下面的任意內容時,都會通過這條rewrite跳轉到www.wk.com對應的地址}?
?rewrite跳轉標記flag使用總結
1,在根location(即location / {...})中或server{...} 標簽中編寫rewrite規則,建議使用last標記?
2,在普通的location(例 location/yunjisuan/{...}或if{}中編寫rewrite規則,則建議使用break標記)
Nginx訪問認證
有時,在實際工作中企業要求我們為網站設置訪問賬號和密碼權限,這樣操作后,只有擁有賬號密碼的用戶才可以訪問網站內容。?
這種使用賬號密碼才可以訪問網站的功能主要應用在企業內部人員訪問的地址上,例如:企業網站后臺,MySQL客戶端phpmyadmin,企業內部的CRM,WIKI網站平臺。
創建密碼文件
?我們可以借用apache的htpasswd軟件,來創建加密的賬號和密碼
htpasswd -bc /usr/local/nginx/conf/.htpasswd wk 123123 #沒有htpasswd可以yum -y install httpd -b非交互指定密碼 -c指定信息儲存文件 用戶名 密碼cat /usr/local/nginx/conf/.htpasswd
wk:FC1/eEc/iK0Mo #賬號密碼是加密的(.htpasswd是文件的名字)
?
在虛擬主機配置文件里加入兩條配置信息
server {listen 80;server_name blog.yunjisuan.com;location / {root /var/www/html/blogcom;index index.html index.htm;auth_basic "登錄wk"; #加入這條配置auth_basic_user_file /usr/local/nginx/conf/.htpasswd; #加入這條配置}}auth_basic :驗證的基本信息選項(后邊跟著的雙引號里就是驗證窗口的名字)
auth_basic_user_file :驗證的用戶文件(后邊根賬號密碼文件的絕對路徑)
基于ip的權限訪問控制
在location里加入訪問規則
deny ip/ip段; (拒絕ip或網段通過) allow ip/ip段; (允許ip或網段通過) #從上到下匹配既停止?
?
轉載于:https://www.cnblogs.com/ywrj/p/9406077.html
總結
- 上一篇: javascript中Math.rand
- 下一篇: Python入门学习笔记13(线程锁与信