一、Niginx是什么?
- Nginx是一個高性能的HTTP和反向代理web服務器,同時也提供了IMAP/POP3/SMTP服務,
- Niginx是一款輕量級的web服務器/反向代理器,
- Nginx是高性能的HTTP和 反向代理的web服務器,處理高并發的能力十分強大,能夠經受高負載的考驗,高達5萬個并發連接數,
- Nginx支持熱部署,啟動簡單,可以做到 7 * 24小時不間斷運行,幾個月都不需要重新啟動,
- Nginx采用 多行程(單執行緒)&多路IO復用模型,一個master行程和多個worker行程,woker行程的數量一般和CPU數量一致
二、Nginx的反向代理(正向代理)

解釋一下:
正向代理: 我們平時需要訪問國外的瀏覽器是不是很慢,比如我們要看推特,看GitHub等等,我們直接用國內的服務器無法訪問國外的服務器,或者是訪問很慢,所以我們需要在本地搭建一個服務器來幫助我們去訪問,那這種就是正向代理,(瀏覽器中配置代理服務器)
反向代理: 那什么是反向代理呢,比如:我們訪問淘寶的時候,淘寶內部肯定不是只有一臺服務器,它的內部有很多臺服務器,那我們進行訪問的時候,因為服務器中間session不共享,那我們是不是在服務器之間訪問需要頻繁登錄,那這個時候淘寶搭建一個過渡服務器,對我們是沒有任何影響的,我們是登錄一次,但是訪問所有,這種情況就是 反向代理,對我們來說,客戶端對代理是無感知的,客戶端不需要任何配置就可以訪問,我們只需要把請求發送給反向代理服務器,由反向代理服務器去選擇目標服務器獲取資料后,再回傳給客戶端,此時反向代理服務器和目標服務器對外就是一個服務器,暴露的是代理服務器地址,隱藏了真實服務器的地址,(在服務器中配置代理服務器)
三、Nginx的負載均衡
什么是負載均衡?
負載均衡建立在現有網路結構之上,它提供了一種廉價有效透明的方法擴展網路設備和服務器的帶寬、增加吞吐量、加強網路資料處理能力、提高網路的靈活性和可用性,
負載均衡(Load Balance)其意思就是分攤到多個操作單元上進行執行,例如Web服務器、FTP服務器、企業關鍵應用服務器和其它關鍵任務服務器等,從而共同完成作業任務,
簡單來說就是:現有的請求使服務器壓力太大無法承受,所有我們需要搭建一個服務器集群,去分擔原先一個服務器所承受的壓力,那現在我們有ABCD等等多臺服務器,我們需要把請求分給這些服務器,但是服務器可能大小也有自己的不同,所以怎么分?如何分配更好?又是一個問題,
Nginx提供的三種負載均衡的方式:
- 輪詢法(默認方法)
每個請求按照時間順序逐一分配到不同的后端服務器,如果后端服務器down掉,能自動剔除宕機的服務器,# 服務器三臺
server1 server2 server3 請求過來,會按照時間順序逐一轉發 第一次請求 server1 第二次請求 server2 第三次請求 server3 第四次請求 server1 第五次請求 server2 第六次請求 server3 ,,, - weight權重模式(加權輪詢)
指定輪詢的幾率,weight和訪問比例成正比,用于后端服務器性能不均的情況,
這種方式比較靈活,當后端服務器性能存在差異的時候,通過配置權重,可以讓服務器的性能得到充分發揮,有效利用資源、權重越大,被訪問的概率越大
# 服務器三臺 server1 1 server2 1 server3 3 請求過來,會按照時間順序逐一轉發 第一次請求 server1 第二次請求 server2 第三次請求 server3 第四次請求 server3 第五次請求 server3 第六次請求 server1 ,,,
- ip_hash
上述方式存在一個問題,在負載均衡系統中,假如用戶在某臺服務器上登錄了,那么該用戶第二次請求的時候,因為我們是負載均衡系統,每次請求都會重新定位到服務器集群中的某一臺,那么已經登錄某個服務器的用戶再重新定位到另一個服務器,其登錄資訊將會丟失,這樣顯然不妥,
我們可以采用ip_hash指令解決這個問題,如果用戶已經訪問了某個服務器,當用戶再次訪問時,會將該請求通過哈希演算法,自動定位到該服務器,每個請求按訪問ip的hash結果分配,這樣每個訪客固定訪問一個后端服務器,可以解決session的問題!
四、Nginx的動態分離
Nginx的靜態處理能力很強,但是動態處理能力不足,因此,在企業中常用動靜分離技術,動靜分離技術其實是采用代理的方式,在server{}段中加入帶正則匹配的location來指定匹配項針對PHP的動靜分離:靜態頁面交給Nginx處理,動態頁面交給PHP-FPM模塊或Apache處理,在Nginx的配置中,是通過location配置段配合正則匹配實作靜態與動態頁面的不同處理方式
目前,通過使用Nginx大大提高了網站的回應速度,優化了用戶體驗,讓網站的健壯性更上一層樓!
五、Nginx的安裝
yum install nginx
組態檔
user root; worker_processes auto; error_log /var/log/nginx/error.log; pid /run/nginx.pid; # Load dynamic modules. See /usr/share/doc/nginx/README.dynamic. include /usr/share/nginx/modules/*.conf; events { worker_connections 1024; } http { log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 4096; include /etc/nginx/mime.types; default_type application/octet-stream; # Load modular configuration files from the /etc/nginx/conf.d directory. # See http://nginx.org/en/docs/ngx_core_module.html#include # for more information. include /etc/nginx/conf.d/*.conf; add_header Access-Control-Allow-Origin *; add_header Access-Control-Allow-Headers X-Requested-With; add_header Access-Control-Allow-Methods GET,POST,OPTIONS; server { listen 80; listen [::]:80; server_name _; # root /root/xj/data/mysite; root /usr/share/nginx/html; # Load configuration files for the default server block. include /etc/nginx/default.d/*.conf; error_page 404 /404.html; location = /404.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { } } # Settings for a TLS enabled server. # # server { # listen 443 ssl http2; # listen [::]:443 ssl http2; # server_name _; # root /usr/share/nginx/html; # # ssl_certificate "/etc/pki/nginx/server.crt"; # ssl_certificate_key "/etc/pki/nginx/private/server.key"; # ssl_session_cache shared:SSL:1m; # ssl_session_timeout 10m; # ssl_ciphers HIGH:!aNULL:!MD5; # ssl_prefer_server_ciphers on; # # # Load configuration files for the default server block. # include /etc/nginx/default.d/*.conf; # # error_page 404 /404.html; # location = /40x.html { # } # # error_page 500 502 503 504 /50x.html; # location = /50x.html { # } # } }
啟動nginx
systemctl start nginx
訪問80埠,效果如下:

六、Nginx常用命令
whereis nginx # 查看nginx路徑 nginx: /usr/sbin/nginx /usr/lib64/nginx /etc/nginx /usr/share/nginx /usr/share/man/man3/nginx.3pm.gz /usr/share/man/man8/nginx.8.gz 啟動:/user/sbin/nginx
指定檔案啟動:/user/sbin/nginx -c /etc/nginx/nginx.conf
停止:/user/sbin/nginx -s stop
安全退出:/user/sbin/nginx -s quit
重新加載:/user/sbin/nginx -s reload 如果修改了組態檔,就需要重新加載
或者:
systemctl start nginx
systemctl restart nginx
systemctl stop nginx
七、Nginx檔案結構
... #全域塊
events { #events塊
...
}
http #http塊
{
... #http全域塊
server #server塊
{
... #server全域塊
location [PATTERN] #location塊
{
...
}
location [PATTERN]
{
...
}
}
server
{
...
}
... #http全域塊
}
-
1、全域塊:配置影響nginx全域的指令,一般有運行nginx服務器的用戶組,nginx行程pid存放路徑,日志存放路徑,組態檔引入,允許生成worker process數等,
user nobody; # nginx運行的用戶身份,一般要么注釋掉,要么把nobody 改成 www 或 nginx worker_processes auto; # 作業行程數,(如果是雙核4執行緒,可以設定為4,一般建議和CPU的邏輯核數量一致) error_log /var/log/nginx/error.log; # 全域指定nginx錯誤日志的存放目錄 pid /run/nginx.pid; # 指定nginx的pid檔案目錄
-
2、events塊:配置影響nginx服務器或與用戶的網路連接,有每個行程的最大連接數,選取哪種事件驅動模型處理連接請求,是否允許同時接受多個網路連接,開啟多個網路連接序列化等,
worker_connections 1024; # 最大可以調整到100,000以上, nginx的最大并發連接數 = worker_processes * worker_connections(行程數*連接數)
-
3、http塊:可以嵌套多個server,配置代理,快取,日志定義等絕大多數功能和第三方模塊的配置,如檔案引入,mime-type定義,日志自定義,是否使用sendfile傳輸檔案,連接超時時間,單連接請求數等,
# 匯入mime.types模塊,讓nginx能夠識別各種各樣的檔案資源 include mime.types; # nginx默認識別的mime.types,默認采用二進制資料格式, default_type application/octet-stream; ? # 設定客戶端訪問nginx的訪問日志格式 log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; # 開啟訪問日志 access_log logs/access.log main; ? # Nginx在進行資料傳輸,會呼叫sendfile()函式, Linux 2.0+ 以后的推出的一個系統呼叫, # 對比一般的資料的網路傳輸sendfile會有更少的切換和更少的資料拷貝, sendfile on; tcp_nopush on; ? # 客戶端保持連接時間 #keepalive_timeout 0; keepalive_timeout 65; ? # 開啟網路傳輸的資料gzip壓縮[會額外消耗一定的cpu資源,但是會節約大量的出口帶寬來提高訪問速度,gzip壓縮演算法的使用會帶來一定的安全隱患,不建議壓縮圖片和大檔案] gzip on; #低于1kb的資源不壓縮 gzip_min_length 1k; ? # 設定壓縮級別,級別范圍:1~9,數字越大壓縮率越高,同時消耗cpu資源也越多,建議設定在5左右, gzip_comp_level 5; # 指定壓縮哪些MIME型別的靜態資源,多個空格隔開,不建議壓縮圖片,視頻等二進制檔案 gzip_types text/plain application/javascript application/x-javascript text/javascript text/xml text/css; # web站點的虛擬主機,類似python的虛擬環境,這里的配置,會讓nginx自動提供一個站點給外界訪問 ? # 指定包含的組態檔 # 可以設定多個 server 模塊 include /etc/nginx/conf.d/*.conf;
-
4、server塊:配置虛擬主機的相關引數,一個http中可以有多個server,
server { # 站點的訪問埠,要允許外界訪問,還需要設定防火墻 listen 80; # 站點的訪問域名地址 server_name www.luffycity.dabanyu.com; #charset koi8-r; #access_log logs/host.access.log main; # 地址模式匹配,location后面的是訪問url路徑,相當于django的正則路由一樣, # 地址匹配成功以后,則會呼叫當前花括號的配置資訊 location / { # root 表示當前站點所在目錄 root html; # index 指定默認首頁 index main.html main.htm; } ... }
-
5、location塊:配置請求的路由,以及各種頁面的處理情況,
在proxy_pass 中的代理url后加上/,代理轉發的url中就不會帶著location中匹配路徑; 如果后面沒有/,代理轉發的url中就會帶上location中的匹配路徑
我們訪問 http://my.yemao.com/proxy/index.html,其實是訪問到了 http://test.yemao.com/index.html

我們訪問 http://my.yemao.com/proxy/index.html,其實是訪問到了 http://test.yemao.com/proxy/index.html,這里將 location 中 匹配的 proxy 也自動加到了 代理轉發的地址后面
同理:在使用 upstream定義后臺服務器時,效果就類似于沒有在轉發后面加上/
upstream backend { server 127.0.0.1:9999; } proxy_pass http://backend; ==> 等價于 http://test.yemao.com/proxy/index.html
如果nginx代理的三個服務器都要在埠*:80上監聽,那么nginx首先決定那個服務器應該處理請求:
[注解] listen 監聽某個ip和埠,并根據傳來的請求中“Host”欄位匹配server_name,然后轉給server_name 服務器去處理server { listen 80; # 監聽埠 server_name example.org www.example.org; # 服務器名稱 ... } server { listen 80;# 監聽埠 server_name example.net www.example.net;# 服務器名稱 ... } server { listen 80;# 監聽埠 server_name example.com www.example.com;# 服務器名稱 ... }
nginx是根據請求中的"Host"欄位來決定應當將這個客戶端的請求轉發給哪一個web服務器,這個"Host"的值應當是與某一個server_name 相匹配的,
但是, 如果其值與任何服務器的 server_name 都不匹配,或者請求根本不包含"Host"欄位,則nginx會將請求轉發到此埠的默認服務器, 在上面的配置中,默認服務器是第一個 ,這是nginx的標準默認行為,
它也可以使用listen指令中的default_server引數明確設定哪個服務器應該是默認的,如下所示 example.net www.example.net 將是默認的 server_name:如果一個server_name都匹配不上,則會將請求轉給默認服務器

server { listen 80 default_server; # 監聽埠, 此服務器為默認服務器 server_name example.net www.example.net; # 服務器名稱 ... }
請注意,默認服務器是監聽埠(listen)的屬性,而不是 server_name 的屬性,
如果客戶端的請求中沒有"Host"欄位,那么我們可以定義組態檔,來扔掉這類的客戶端請求,
如下的配置中,server_name 設定為一個空字串,它將匹配沒有“Host”頭欄位的請求,并回傳一個特殊的nginx非標準代碼444來關閉連接,
server { listen 80; server_name ""; return 444; }
不同ip地址的服務器:
# 第一個服務器 server { listen 192.168.1.1:80; # 監聽此ip的80埠 server_name example.org www.example.org; # 服務器名 ... } # 第二個服務器 server { listen 192.168.1.1:80 default_server; # 監聽此ip的80埠 server_name example.net www.example.net; # 服務器名,為此ip,埠的默認服務器 ... } # 第三個服務器 server { listen 192.168.1.2:80 default_server; # 監聽此ip的80埠 server_name example.com www.example.com; # 服務器名,為此ip,埠的默認服務器 ... }
在上面的配置中,nginx首先根據配置中的server的listen指令監聽請求的ip地址和埠
然后,在監聽此IP和埠的server中找到與請求中“Host”欄位匹配的server_name , 讓這個server_name 來處理請求,如果沒有找到匹配的server_name,則由默認服務器處理該請求,
例如,在 192.168.1.1:80 埠上收到的 host 為 www.example.com 請求將由192.168.1.1:80埠的默認服務器處理,即由第二臺服務器處理,因為192.168.1.1:80 埠上沒有名為 www.example .com 的 server_name,
現在我們知道了nginx 配置中是如何選擇服務器來處理請求的了
那么在指定的服務器中,由哪一個location 來處理請求呢? 下面的配置中有3個location
匹配location 的程序如下:
location匹配命令
-
~ : 表示執行一個正則匹配,區分大小寫
-
~*: 表示執行一個正則匹配,不區分大小寫
-
^~: 表示普通字符匹配,如果該選項匹配,則只匹配該選項,其他選項不匹配,一般用于匹配目錄
-
= : 表示普通字符精確匹配
-
@: 定義一個自命名的location用于內部定向時使用,列如 error_page, try_files
優先級:
=前綴的指令嚴格匹配這個查詢,如果找到,停止搜索,
所有剩下的常規字串,最長的匹配,如果這個匹配使用^?前綴,搜索停止,
正則運算式,在組態檔中定義的順序,
如果第3條規則產生匹配的話,結果被使用,否則,使用第2條規則的結果,
首先,nginx 不管location 的順序,而是從location 中找到與請求的url 最匹配、最具體的這個location 前綴,
/ 根目錄能夠匹配到所有的請求,也就是說,所有的請求都可以由 / 根目錄的這個location 來處理, 因此 / 根目錄的location 是在沒有其他的location 匹配這個url 的時候,才會由它處理該請求,
其次,nginx 檢查由正則運算式組成的location ,一旦找到匹配的location , 則停止查找,由此location 來處理該請求,
server { listen 80; # 監聽本機的80埠 server_name example.org www.example.org; # 服務器名 root /data/www; location / { # 這里的 / 表示匹配所有的路徑 index index.html index.php; } location ~* \.(gif|jpg|png)$ { # 這里表示為,不區分大小寫的正則匹配,匹配以gif、jpg、png結尾的請求 expires 30d; } location ~ \.php$ { # 這里的正則表示,匹配以php結尾的請求 fastcgi_pass localhost:9000; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }
需要注意的是,只匹配請求url中的非引數部分,這是因為,引數可以有很多種方式給出,例如:
/index.php?user=john&page=1 /index.php?page=1&user=john /index.php?page=1&something+else&user=john # 查詢字串中的內容種類太多了,不好匹
舉幾個例子看看上面的nginx配置是如何處理請求的吧,
-
請求url
“/logo.gif”首先與location 前綴“/”匹配,也與正則運算式“.(gif|jpg|png)”匹配,因此,它由第二個location處理, 使用指令"root" /data/www 將請求映射到檔案/data/www/logo.gif,并將該檔案回傳給客戶端, -
請求url
“/index.php”首先和lcoation 前綴"/“匹配,也與正則運算式“.php$ "匹配,因此,由第三個location來處理請求,請求被傳遞給監聽localhost:9000的FastCGI服務器, fastcgi_param指令將FastCGI引數SCRIPT_FILENAME設定為“/data/www/index.php”,FastCGI服務器執行該檔案, 變數等于指令的值(),變數 fastcgi_script_name等于請求URI (”/index.php”), -
請求
“/about.html”僅與location前綴 “/” 匹配,因此,該請求由此locatoin處理, 使用 “root” 指令(值 /data/www)將請求映射到檔案/data/www/about.html,并將檔案回傳給客戶端, -
請求
“/”僅與 location前綴 “/” 匹配,因此該請求由此location處理,然后索引指令根據其引數和 “root” 指令的值/data/www查找檔案是否存在, 如果檔案/data/www/index.html不存在,并且檔案/data/www/index.php存在,則指令執行內部重定向到“/index.php”,并且nginx再次搜索位置 如果請求是由客戶發送的, 正如我們之前看到的,重定向的請求最終將由FastCGI服務器處理,
八、Nginx引數詳解
worker_processes
woker_processes 1|auto; # 指定nginx作業時的行程數,設定值小于CPU的核數
worker_connections
worker_connections 1024 # 設定Nginx的最大連接數
keepalive_timeout
keepalive_timeout 65; # http連接超時時間,默認是65s,當需要上傳大檔案時,避免檔案上傳程序中斷開連接,導致檔案上傳失敗
gzip
gzip on; # 對網路傳輸的資料內容進行壓縮
upstream
# 默認為輪詢
upstream backend{
server 101.35.241.220:8001;
server 150.158.153.179:8002;
server 42.194.147.234:8003;
}
第一個請求 101.35.241.220:8001
第二個請求 150.158.153.179:8002
第三個請求 42.194.147.234:8003
...
# 設定權重
upstream backend{
server 101.35.241.220:8001 weight=1;
server 150.158.153.179:8002 weight=2 max_fails=2 fail_timeout=2;;
server 42.194.147.234:8003 weight=1 max_fails=2 fail_timeout=1;
}
# 請求會按照權重進行轉發
第一個請求 101.35.241.220:8001
第二個請求 150.158.153.179:8002
第三個請求 150.158.153.179:8002
第四個請求 42.194.147.234:8003
第四個請求 101.35.241.220:8001
,,,
max_fails=2:允許請求失敗的次數,默認為1,當超過最大次數時,回傳proxy_next_upstream模塊定義的錯誤,
fail_timeout=1:在經歷了max_fails次失敗后,暫停服務的時間,max_fails可以和fail_timeout一起使用,
# 熱備和下線
upstream backend{
server 101.35.241.220:8001;
server 150.158.153.179:8002 down;
server 42.194.147.234:8003 backup;
}
# 150.158.153.179:8002 down 不參與轉發
# 42.194.147.234:8003 backup 只有在主服務器掛掉,才會生效
server
server { listen 80; # 監聽的埠 server_name localhost; # 宣告server_name,Host請求頭命中server_name才會走這個server #charset koi8-r; #access_log logs/host.access.log main; location / { # 所有的請求都在走這里 root html; # 指定根目錄 index index.html index.htm; proxy_pass http://backend; # 請求轉發 proxy_redirect default; proxy_set_header Host $host; proxy_set_header X_Real_IP $remote_addr; proxy_set_header X_Forwarded_For $proxy_add_x_forwarded_for; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } }
注意點
# root location ^~ /t/ { root /www/root/html/; } 如果一個請求的url是/t/a.html,web服務器會回傳服務器上/www/root/html/t/a.html的檔案內容 # alias location ^~ /t/ { alias /www/root/html/new_t/; } 如果一個請求是/t/a.html,則web服務器會回傳服務器上/www/root/html/new_t/a.html 使用alias的時候,目錄名后面一定要加‘/’ alias在使用正則匹配的時候,必須捕獲要匹配的內容并在指定的內容處使用 alias只能位于location中,root可以不放在lication中 如果root在全域中和location中都存在,則優先location中的root
location
# 配置該服務的訪問規則,同一個server可以配置多個location
= 表示精確匹配
^~ 表示uri以指定字符或者字串開頭的前綴匹配,不是正則匹配,一旦匹配則不在查找其他匹配項
~ 表示區分大小寫的匹配大小寫的正則匹配
~* 表示不區分大小寫的正則匹配
/ 表示通用匹配,如果沒有其他匹配,任何請求都會匹配到
規則優先級:
= 高于 ^~ 高于 ~* 等于 ~ 高于 /
九、負載均衡
http { upstream myapp1 { server srv1.example.com; server srv2.example.com; server srv3.example.com; } server { listen 80; location / { proxy_pass http://myapp1; # 將請求轉發到 定義的服務器里串列中 } } }
在上面的示例中,在srv1-srv3上運行了3個相同應用程式的實體, 如果沒有指明配置負載均衡的方法,則默認為回圈方式實作負載均衡, 所有請求都代理到服務器組myapp1,nginx應用HTTP負載平衡來分發請求,要為HTTPS而不是HTTP配置負載均衡,只需使用“https”作為協議,更多詳情見 nginx負載均衡官方檔案 http://nginx.org/en/docs/http/load_balancing.html
nginx 組態檔的含義見 菜鳥教程-nginx https://www.runoob.com/w3cnote/nginx-setup-intro.html
nginx 負載均衡,反向代理 : https://www.runoob.com/w3cnote/nginx-proxy-balancing.html
Nginx 服務器安裝及組態檔詳解 https://www.cnblogs.com/bluestorm/p/4574688.html 根據上面了解到的知識,修改 /usr/local/nginx/conf/nginx.conf 為如下:
########### 每個指令必須有分號結束,################# user root; # 配置用戶或用戶組,否則有可能會出錯 worker_processes auto; # 允許生成的行程數,默認為1 error_log /var/log/nginx/error.log warn; # 指定日志路徑,級別,這個設定可以放入全域塊,http塊,server塊,級別依次為:debug|info|notice|warn|error|crit|alert|emerg pid /run/nginx.pid; # 指定nginx行程運行檔案存放地址 # Load dynamic modules. See /usr/share/nginx/README.dynamic. include /usr/share/nginx/modules/*.conf; events { # events塊 worker_connections 1024; # 最大連接數,默認為512 } http { # http塊 include /etc/nginx/mime.types; # 檔案擴展名與檔案型別映射表 default_type application/octet-stream; # 默認檔案型別,默認為text/plain # log_format main '$remote_addr - $remote_user [$time_local] "$request" ' # '$status $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$http_x_forwarded_for"'; # 自定義日志格式 # access_log /var/log/nginx/access.log main; sendfile on; # 允許sendfile方式傳輸檔案,默認為off,可以在http塊,server塊,location塊, # tcp_nopush on; # tcp_nodelay on; keepalive_timeout 65; #連接超時時間,默認為75s,可以在http,server,location塊, # types_hash_max_size 2048; # 設定負載均衡后臺服務器串列, backend可以修改為其它名字 upstream backend { #ip_hash; # 指定負載均衡的方式,3種,默認為輪詢, server 192.168.10.100:8080 max_fails=2 fail_timeout=30s ; # 30秒錯誤2次,這臺服務器就掛掉 server 192.168.10.101:8080 max_fails=2 fail_timeout=30s ; server 127.0.0.1:8027; server 127.0.0.1:8028; server 127.0.0.1:8029; } server { # server塊 listen 80; # 通過80埠訪問nginx時 server_name localhost; # 服務器名,監聽地址 location / { # location塊,# 請求的url過濾,正則匹配,~為區分大小寫,~*為不區分大小寫,對以 / 所有地址進行負載均衡 root html; # 定義服務器的默認網站根目錄位置,如果locationURL匹配的是子目錄或檔案,root沒什么作用,一般放在server指令里面或/下 # index index.html; #定義路徑下默認訪問的檔案名,一般跟著root放 # proxy_pass http://mysvr; 請求轉向backend定義的服務器串列,即反向代理,設定被代理服務器的埠或套接字以及URL # deny 127.0.0.1; #拒絕的ip # allow 172.18.5.54; #允許的ip include uwsgi_params; uwsgi_pass backend; # 非集群設定的是uWSGI套接字地址,集群則直接使用負載均衡組名 # uwsgi_pass 127.0.0.1:5000; # 非集群時使用,如果配合uwsgi使用,則這里要和uwsgi.ini中的socket一致 } location /static/ { # 請求靜態檔案時,將回傳/home/myproject/static/xxx alias /home/myproject/static; } error_page 404 /404.html; # 錯誤頁 location = /40x.html { } error_page 500 502 503 504 /50x.html; # 錯誤頁 location = /50x.html { } } }
本文來自博客園,作者:暮歌行,轉載請注明原文鏈接:https://www.cnblogs.com/xuejian123/p/17209047.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/546649.html
標籤:架構設計
上一篇:怎么利用異步設計提升系統性能?
下一篇:Nginx
