Web服務-Nginx
NMP架構:Nginx+Mysql+php(python),Nginx官方(http://nginx.org),不支援java
比apache效能高,併發高,支援代理
訪問原理:
客戶訪問--->nginx讀取html檔案傳給客戶端--->瀏覽器解釋頁面
nginx模組化:安裝時需要選擇
依賴包:gcc、pcre、pcre-devel、zlib、zlib-devel、openssl、openssl-devel
Nginx配置檔案及目錄:
/usr/local/nginx/ #安裝目錄
/usr/local/nginx/conf/nginx.conf #主配置檔案,會有一份nginx.conf.default原始
/usr/local/nginx/html #網頁檔案,預設index.html
/usr/local/nginx/logs #日誌檔案
/usr/local/nginxs/sbin/nginx #啟動指令碼
nginx -s stop #停止服務
nginx -s reload #重新載入配置檔案
-V #檢視安裝時使用了什麼引數
配置主配置檔案:(/usr/local/nginx/conf/nginx.conf)
使用者認證:
auth_basic "Input pass:"; #新增兩行到server程式碼塊中,埠下一行,提示使用者輸入
auth_basic_user_file "/usr/local/nginx/pass"; #對比使用者輸入與檔案,pss檔案要建立
#yum -y install httpd-tools #安裝
#htpasswd -cm /usr/local/nginx/pass 使用者名稱 #使用軟體生成pass檔案,-c 會覆蓋
> 密碼
加密網站:
生成證書(公鑰)和私鑰:(加密演算法:對稱演算法(AES,DES);非對稱演算法(RSA,DSA);資訊摘要(md5,sha256,sha512))
nginx預設讀取位置:/usr/local/nginx/conf
#openssl genrsa -out my.key #生成私鑰
#openssl req -new -x509 -key my.key -out my.crt #通過私鑰生成證書
依次問:國家(CN),省份,城市,公司名稱,部門,主機,郵箱
配置檔案:/usr/local/nginx/conf/nginx.conf
取消https下server程式碼塊的註釋,
ssl_certificate my.crt; #證書
ssl_certificate_key my.key ; #私鑰
注意:訪問時,需要使用https,若無法訪問,清楚瀏覽快取,"md5sum file_name"資訊摘要生成
虛擬主機:【基於域名,基於埠,基於iP:埠前加ip】ip訪問,顯示第一個
server{ #一個server代表一個虛擬主機
listen 80; #埠
server_name www.server.com; #域名
location / {
root html; #網頁目錄
index index.html index.htm #首頁名
}
}
排程器(代理服務):(不作快取,,web高可用,負載均衡)
upstream 叢集名 { #新增在http程式碼塊內,server程式碼塊上
server web伺服器ip;
server web伺服器ip;
……
伺服器ip後可用引數:
weight=數字 #權重
max_fails=次數 fail_timeout=秒數 #嘗試連線X次,若失敗,則X秒後再次連線
down #標記宕機
ip_hash; #加在server語句上,相同客戶訪問相同伺服器
}
server {
listen 80;
server_name www.server.com;
location / {
proxy_pass http://叢集名; #如果使用者訪問www.server.com則排程叢集,而不是html中的
root html;
}
}
自帶web檢測,其中一個壞了,則不會訪問,恢復後自動訪問。
地址重寫:(關鍵字寫到location程式碼塊外)
地址重寫就是首先獲得一個進入的URL請求然後把它重新寫成網站可以處理的另一個URL的過程。
地址重寫的優點:
- 縮短url,隱藏實際路徑提高安全性
- 易於使用者記憶和鍵入。
- 易於被搜尋引擎收錄
配置:
……
location / {
root html;
index index.html index.htm;
}
rewrite 舊的地址 新地址 [redirect];
#地址要使用"/file_name"格式,使用redirect選項,使用者地址會顯示新地址 ,預設不變,目錄有變化時必須使用redirect,否則頁面圖片不能載入;
rewrite ^/ http://www.baidu.com; 支援正則,跳轉網站,不論訪問什麼,都轉到百度
rewrite /(.*) http://www.baidu.com/$1 網站域名變化,目錄不變,正則使用$1引用,
或者:不同使用者,返回不同頁面
if ($http_user_agent ~* firefox) { #使用if判斷返回引數($http_user_agent)是否包含hirefox關鍵字,使用~*模糊匹配
rewrite ^/(.*) /firefox/$1; #任何頁面都轉到firefox目錄下
}
注意:在重啟服務時,會埠衝突,殺死程序在開。(netstat -nutlp | grep nginx)
優化:(/usr/local/nginx/conf/nginx.conf)
安全
server_tokens off; #不顯示版本,要新增,在http程式碼塊中
效能:
-
客戶端提示"too many openfiles
",
提高併發量,受linux
最大開啟檔案限制
worker_processes 數字; #與cpu核心數一樣
worker_connections 數字; #併發量
-
解決客戶端訪問頭部過長:報414錯誤
原理:客戶端傳送請求頭--->伺服器使用快取儲存請求
client_header_buffer_size 1k; #最小快取1k,要新增,http程式碼塊中
large_client_header_buffers 4 4k; #最大快取4個4k
-
客戶端快取:適合長其不變的靜態資料(.jpg,avi,mp3,mp4,flv)[/nginx.conf]
……
server {
listen 80;
location ~\.(jpg|png|gif) { #檢查到圖片檔案則快取30天
expires 30d;
}
}
注意:"ctrl+shift+delete"清楚快取
-
自定義返回404頁面:[
/nginx.conf,有模板]
error_page 404 /404.html; #當出現404錯誤則顯示404.html,404.html自建立
-
防止盜鏈:
Nginx升級:升級後需要重啟服務
curl命令:測試頁面
curl [引數] http://域名
-I :顯示伺服器響應資料