開源版:Nginx.org 商業版: Nginx.com
若是是開發 API 服務或者是 Web 防火牆,能夠選擇 openResty .html
# 下載 Nginx
wget http://nginx.org/download/nginx-1.16.1.tar.gz
# 進行解壓
tar -xzf nginx-1.16.1.tar.gz
# 查看編譯相關的命令
./configure --help
# 進行編譯,PATH 是你本地指定的安裝目錄
./configure --prefix=PATH
# 執行首次安裝命令
make install
複製代碼
nginx -s reload
-h
-c
-g
-p
-s
指運行期間執行相關命令;重啓nginx: nginx - s reload
; 進行日誌切割: nginx -s reopen
-t -T
-v -V
# 開啓 gizp 壓縮
gizp on;
location {
root /root/data/web/dist;
index index.html index.htm;
}
複製代碼
反向代理(Reverse Proxy)方式是指以代理服務器來接受Internet上的鏈接請求,而後將請求轉發給內部網絡上的服務器;並將從服務器上獲得的結果返回給Internet上請求鏈接的客戶端,此時代理服務器對外就表現爲一個服務器。 一般的代理服務器,只用於代理內部網絡對Internet的鏈接請求,客戶機必須指定代理服務器,並將原本要直接發送到Web服務器上的http請求發送到代理服務器中。當一個代理服務器可以代理外部網絡上的主機,訪問內部網絡時,這種代理服務的方式稱爲反向代理服務。 一臺機器做爲代理機器,能夠根據負載均衡算法,將請求轉發給下游服務器。nginx
反向代理服務器一般有兩種模型:web
在防火牆外部設置一個代理服務器做爲內容服務器的替身。當外部客戶機嘗試訪問服務時,會訪問到代理服務器,再由其代理到防火牆內部的內容服務器上。這樣實際內容位於內容服務器上,在防火牆內部受到安全保護。代理服務器位於防火牆外部,在客戶機看來就像是內容服務器。算法
能夠利用代理服務器的高速緩存特性,建立一個用於負載均衡的服務器池,使用多個代理服務器來平衡各 Web 服務器間的網絡負載,這樣當 Web 服務器接收大量的請求時,可使用代理服務器分擔 Web 服務器的負載,以此提升網絡訪問效率。後端
location {
root /root/data/web/dist;
index index.html index.htm;
# 配置代理轉發
proxy_pass:
}
複製代碼
nginx中有兩個模塊有 proxy_pass 指令:ngx_http_proxy_module 的 proxy_pass; ngx_stream_proxy_module 的 proxy_pass緩存
ngx_stream_proxy_module 模塊的 proxy_pass 指令只能在 server 段使用使用, 只須要提供域名或ip地址和端口。能夠理解爲端口轉發,能夠是 tcp 端口,也能夠是 udp 端口。 ngx_http_proxy_module 模塊的 proxy_pass 指令須要在 location 段,location中的 if 段,limit_except 段中使用,除了須要提供域名或ip地址和端口外,還須要提供協議,如"http"或"https",還有一個可選的 uri 能夠配置。安全
server {
listen 127.0.0.1:12345;
proxy_pass 127.0.0.1:8080;
}
server {
listen 12345;
proxy_connect_timeout 1s;
proxy_timeout 1m;
proxy_pass example.com:12345;
}
server {
listen 53 udp;
proxy_responses 1;
proxy_timeout 20s;
proxy_pass dns.example.com:53;
}
server {
listen [::1]:12345;
proxy_pass unix:/tmp/stream.socket;
}
複製代碼
server {
listen 80;
server_name www.test.com;
# 正常代理,不修改後端url的
location /some/path/ {
proxy_pass http://127.0.0.1;
}
# 修改後端url地址的代理(本例後端地址中,最後帶了一個斜線)
location /testb {
proxy_pass http://www.other.com:8801/;
}
# 使用 if in location
location /google {
if ( $geoip_country_code ~ (RU|CN) ) {
proxy_pass http://www.google.hk;
}
}
location /yongfu/ {
# 沒有匹配 limit_except 的,代理到 unix:/tmp/backend.socket:/uri/
proxy_pass http://unix:/tmp/backend.socket:/uri/;;
# 匹配到請求方法爲: PUT or DELETE, 代理到9080
limit_except PUT DELETE {
proxy_pass http://127.0.0.1:9080;
}
}
}
複製代碼
由於反向代理之後,內容服務器接收到的請求參數來自於反向代理服務器,經過 proxy_set_header 字段進行設置,能夠拿到客戶端的請求參數.bash
location / {
proxy_set_header Host $host;
proxy_ser_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
複製代碼
咱們能夠將一些信息緩存到內存中服務器
http {
#
proxy_cache_path path;
location / {
# cache_name 就是內存的存儲位置
proxy_cache cache_naem;
}
}
複製代碼
# http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_cache_path
緩存文件的路徑 +
[levels=levels] 設置緩存文件目錄層次;levels=1:2 表示兩級目錄
[use_temp_path=on|off] 臨時文件的目錄
keys_zone=name:size 設置緩存名字和共享內存大小
[inactive=time] 在指定時間內沒人訪問則被刪除
[max_size=size] 在指定時間內沒人訪問則被刪除
[manager_files=number]
[manager_sleep=time]
[manager_threshold=time]
[loader_files=number]
[loader_sleep=time]
[loader_threshold=time]
[purger=on|off]
[purger_files=number]
[purger_sleep=time]
[purger_threshold=time];
複製代碼