Nginx中介軟體使用整理
nginx是一個高效能的HTTP和反向代理伺服器,(靜態資源,服務轉發)也是一個IMAP/POP3/SMTP伺服器,最出名的就是反向代理,簡答理解就是作用在伺服器端,大概流程 客戶端---->訪問nginx的虛擬伺服器---->找到真實的伺服器---->在返回給客戶端(是否還需要通過nginx待驗證)
以鑫E家微信報價展示為例:(反向代理) 所有的客戶端先訪問到nginx 在通過nginx的配置轉發到真實的伺服器,因此作用於伺服器端(此處用nginx是因為我們虛擬機器是特別的區域網,外網需要訪問需要使用特定的埠,當然我我們可以在外網發請求時候直接配置該埠,那麼我們服務端就得改成此埠,埠又具有唯一性,其他服務就不能使用此埠,所以用ngin作用在虛擬機器內統一使用8002埠代理任何服務)
背景:在外網(虛擬機器)環境下開發前端vue專案,需傳送請求到虛擬機器內的服務端,此時可以用到nginx的反向代理,當然也是侷限於特別的網段,特定的埠。同時 vue專案是基於node的,可以使用命令啟動,不需要放在伺服器才能訪問。
在服務端的IP下配置啟動nginx來反向代理,也就是在服務端的同一個IP下,配置如下:
#user nobody;# nginx的啟動使用者
worker_processes 1;
#代表nginx的工作程序 nginx啟動有兩種程序 一種是主程序 master processes 一種就是worker processes,
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid; #主程序的程序號檔案
events {#工作模式
worker_connections 1024; #單個工作程序的最大連線數目
}
http {
include mime.types; #定義了所有的檔案型別 比如 text/html 對應html htm , image/png 對應了png , 代表了資源的媒體型別 當我們請求請求html的時候 nginx會在返回的頭資訊中加入Content_Type :text/html,告訴瀏覽器是什麼型別檔案,然後瀏覽器來選擇操作。
default_type application/octet-stream;#預設的檔案型別 瀏覽器會來下載該檔案
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'"$request_body" $body_bytes_sent $status ';
'"$http_referer" "$http_user_agent" "$http_x_forwarded_for"';
#日誌檔案的內容 $remote_addr代表客戶端的ip地址,當通過了代理之後該 地址就變成了代理地址
$remote_user 記錄客戶端認證的請求nginx的使用者 如果沒開啟則沒有
$time_local 記錄時間時區
$request 記錄http請求
$http_refer 記錄請求是從哪個頁面的連結過來 在www.baiducom 發起圖片訪問 就是百度
$http_user_agent 代表瀏覽器的版本資訊
$http_x_forwarder_for 當我們通過代理的時候會記錄該代理地址
比如 客戶端IP ->proxyIP1 就是變成 客戶端IP+proxyIP1 以此類推
sendfile on;
#sendfile 代表高效檔案讀取
keepalive_timeout 65;
#客戶端服務端超時時間
client_max_body_size 500m;
#此處只配置了一臺真實的伺服器(服務端專案所在),nginx預設是輪詢的方式,Nginx可以配置代理多臺伺服器,當一臺伺服器宕機之後,仍能保持系統可用 ,當然還有其他的分配策略,可自行百度
upstream serverProxy {
server 192.168.10.196:8080;
}
#server 就是服務,這裡其實是虛擬服務,listen就是虛擬服務的埠,server_name就是虛擬服務的訪問路徑, location / 就是請求的規則路徑,預設回到根目錄的預設頁面,就是我們訪問localhost:9999的是時候會訪問
#root下的index.html ,當我們訪問localhost:9999/weixin/時候,也就是當我們在某頁面請求localhost:9999/weiixn/xxx.do的時候會被轉發到serverProxy(192.168.10.196:8080/weixin/xxx.do)
server {
listen 9999;
server_name localhost;
access_log logs/host.access.log main;
location / {
root D:/vueWorkSpace2/mint-ui-example/dist;
index index.html;
}
#反向代理/mobile/下的.do請求到遠端伺服器==》192.12.35.192:8008張成軒
location /weixin/ {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
#本地.do模擬資料服務,
server {
listen 9224;
server_name dataServer;
access_log logs/data.access.log main;
#nginx預設不可以post取靜態檔案,會返回405狀態
#此處修改post請求.json(.do)的響應狀態為200
#以json形式返回
location ~ (.*\.json) {
root D:/vx/VX-NJYH/sample/data/;
default_type application/json;
error_page 405 =200 $1;
}
}
}