日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

nginx学习小结

發布時間:2023/12/3 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 nginx学习小结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

nginx


【0】README

本文po處理 nginx的主要內容,包括反向代理,負載均衡,動靜分離,高可用集群等;
本文引用鏈接:
vmware安裝centos8,refer2 https://blog.csdn.net/PacosonSWJTU/article/details/119510351 ;
centos8安裝 nginx,refer2 https://blog.csdn.net/PacosonSWJTU/article/details/119479024 ;
centos安裝 tomcat9, refer2 https://blog.csdn.net/PacosonSWJTU/article/details/119487438 ;


【1】介紹

【1.1】基本概念

1)nginx是什么,做什么事情;

Nginx (engine x) 是一個高性能的HTTP和反向代理web服務器,同時也提供了IMAP/POP3/SMTP服務。

Nginx 是一個很強大的高性能Web和反向代理服務,它具有很多非常優越的特性: 在連接高并發的情況下,Nginx是Apache服務不錯的替代品:Nginx在美國是做虛擬主機生意的老板們經常選擇的軟件平臺之一。能夠支持高達 50,000 個并發連接數的響應,感謝Nginx為我們選擇了 epoll and kqueue作為開發模型。[服務器] Nginx作為負載均衡服務:Nginx 既可以在內部直接支持 Rails 和 PHP 程序對外進行服務,也可以支持作為 HTTP代理服務對外進行服務。Nginx采用C進行編寫,不論是系統資源開銷還是CPU使用效率都比 Perlbal 要好很多。 處理靜態文件,索引文件以及自動索引;打開文件描述符緩沖。 無緩存的反向代理加速,簡單的負載均衡和容錯。 FastCGI,簡單的負載均衡和容錯。 模塊化的結構。包括 gzipping, byte ranges, chunked responses,以及 SSI-filter 等 filter。如果由 FastCG或其它代理服務器處理單頁中存在的多個 SSI,則這項處理可以并行運行,而不需要相互等待。
2)反向代理

2.1)正向代理

正向代理服務器扮演的是客戶端角色,是位于客戶端和目標服務器之間的代理服務器(中間服務器),需要在本地配置要訪問的目標服務器。

為了從原始服務器取得內容,客戶端向代理服務器發送一個請求,并且指定目標服務器,之后代理向目標服務器轉交并且將獲得的內容返回給客戶端。

正向代理的情況下客戶端必須要進行一些特別的設置才能使用

2.2)反向代理

反向代理服務器扮演的是服務器角色,因此客戶端不需要進行任何設置,因為代理配置在反向代理服務器中配置。

客戶端向反向代理發送請求,接著反向代理判斷請求走向何處,并將請求轉交給客戶端,使得這些內容就好似他自己一樣,一次客戶端并不會感知到反向代理后面的服務。

2.3)正向代理與反向代理的區別

  • 區別1:正向代理中,代理服務器作為客戶端的代理,反向代理中,代理服務器是服務端的代理(干貨——這句真的是說清楚了正向代理與反向代理的區別);
  • 區別2:正向代理一般是客戶端架設的,比如本地安裝一個代理軟件(翻墻軟件就是典型的正向代理的例子)。而反向代理一般是服務器架設的,比如在自己的機器集群中部署一個反向代理服務器 ( 前后端統一域名就是反向代理的例子)
  • 區別3:正向代理中,服務器不知道真正的客戶端到底是誰,以為訪問自己的就是真實的客戶端。而在反向代理中,客戶端不知道真正的服務器是誰,以為自己訪問的就是真實的服務器。
  • 區別4:正向代理和反向代理的作用和目的不同。正向代理主要是用來解決訪問限制問題。而反向代理則是提供負載均衡、安全防護等作用。二者均能提高訪問速度;
  • 區別5:正向代理中,瀏覽器與代理服務器在同一個LAN 局域網中;而反向代理中,代理服務器與目標服務器在同一個LAN ;
3)負載均衡;

定義: 單個服務器無法滿足訪問請求,我們增加服務器數量,然后將請求分發到各個服務器上。即將原先請求集中到單個服務器上的情況改為 發送到多個服務器上,即把負載或訪問壓力分發到不同服務器,具體是哪臺服務器由 負載均衡器根據給定策略來選擇 ; 這種把請求負載分發到多個服務器的請求轉發策略,稱為負載均衡;

4)動靜分離

為了加快網頁解析速度,把動態頁面和靜態頁面由不同的服務器來解析,加快解析速度,降低原來單個服務器的壓力;
靜態資源,html,css,js;
動態資源,servlet,jsp;
動靜分離部署圖:
但現在 servlet,jsp用的比較少了,所以應用場景不多;

【1.2】nginx安裝,常用命令和配置文件

1)在linux系統中安裝nginx

參見 https://blog.csdn.net/PacosonSWJTU/article/details/119479024 ;

2)nginx常用命令

安裝完成后,nginx 命令在

[root@localhost sbin]# which nginx /usr/sbin/nginx

參見 https://blog.csdn.net/PacosonSWJTU/article/details/119479024 ;

3)nginx配置文件

安裝完成后,nginx配置文件在 /etc/nginx/nginx.conf 下面;

3.0)nginx.conf 配置文件由3部分組成;
3.1)部分1:全局塊;

從開始到events 塊之間的內容,主要設置 nginx運行的配置指令;

# For more information on configuration, see: # * Official English Documentation: http://nginx.org/en/docs/ # * Official Russian Documentation: http://nginx.org/ru/docs/user nginx; 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;

worker_process auto或1 ; 表示支持的并發請求;

3.2)部分2:events塊;

主要是配置nginx服務器與用戶網絡連接;

events {worker_connections 1024; }

worker_connections 表示每個worker進程支持的最大連接數是多少;

3.3)部分3:http塊;

配置了 代理,緩存和日志定義等; http塊下面包括 http全局塊, server塊

3.3.1)http全局塊

配置的指令包括 文件引入, MIME-TYPE定義,日志定義,連接超時時間 等;

媒體類型(通常稱為 Multipurpose Internet Mail Extensions 或 MIME 類型 )是一種標準,用來表示文檔、文件或字節流的性質和格式。

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 2048;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;
3.3.2)server塊
server {listen 80 default_server;listen [::]:80 default_server;server_name _;root /usr/share/nginx/html;# Load configuration files for the default server block.include /etc/nginx/default.d/*.conf;location / {}error_page 404 /404.html;location = /40x.html {}error_page 500 502 503 504 /50x.html;location = /50x.html {}}

1個server塊就是一個虛擬主機;1個http可以包含多個server塊;

每個server塊分為全局server, 也可以通過包含多個location塊;


【2】nginx配置實例1-反向代理

1)實現效果

瀏覽器輸入地址 www.123.com ; 直接跳轉到 tomcat主頁面;

2)步驟
step1) 啟動tomcat

安裝并啟動tomcat 參見 https://blog.csdn.net/PacosonSWJTU/article/details/119487438 ;

firewall-cmd --zone=public --add-port=8080/tcp --permanent 開放8080端口被訪問 firewall-cmd --reload 重啟防火墻
step2) 通過nginx 配置反向代理策略

step3) 配置 host

添加 www.abc.com 的ip地址映射 ,如下:

192.168.163.204 www.abc.com

step4) 添加nginx反向代理配置

server {listen 80;server_name 192.168.163.204;location / {root html;index index.html index.htm;proxy_pass http://127.0.0.1:8080;}}

效果如下: 訪問www.abc.com , 被代理到 tomcat首頁, 即127.0.0.1:080 d端口


【3】nginx配置實例2-反向代理

1)實現效果

使用nginx反向代理,根據訪問路徑的不同代理到請求不同端口;
如 nginx監聽端口 9001
訪問 www.abc.com/test01 直接跳轉到 http://192.168.163.204:8080/test01/index01.html
訪問 www.abc.com/test02 直接跳轉到 http://192.168.163.204:8080/test02/index02.html

2)步驟
step1)配置tomcat測試頁面

step2)配置nginx反向代理

server {listen 80;server_name 192.168.163.204;location / {root html;index index.html index.htm;proxy_pass http://127.0.0.1:8080;}location /test01 {proxy_pass http://127.0.0.1:8080/test01/;}location /test02 {proxy_pass http://127.0.0.1:8080/test02/;}}
補充: 反向代理proxy_pass絕對路徑與相對路徑

注意 https://www.jianshu.com/p/ec14f55fd209 , nginx反向代理proxy_pass絕對路徑和相對路徑 ;

  • 絕對路徑: 127.0.0.1:8080/test01/ 后面帶了斜杠,就是 絕對路徑 ; 絕對路徑會把 location中的 /test01 給刪除掉;
  • 相對路徑: 127.0.0.1:8080/test01 后面不帶斜杠,就是 相對路徑; 相對路徑會把 location中的 /test01 也作為請求路徑一部分傳給服務器;
step3)反向代理設置訪問成功


補充2: 詳解Nginx location 匹配規則

https://blog.csdn.net/bigtree_3721/article/details/106105924


【4】nginx配置實例2-負載均衡

1)負載均衡定義

通過增加服務器數量,把請求負載分發到各個服務器上,以減少單個服務器訪問壓力的訪問模型;

2)實現效果

訪問 http://www.abc.com/test01/index01.html , nginx 把請求分發到 192.168.163.201 和 192.168.163.204 ;

3)步驟
step1)負載均衡配置

在http 塊中添加 upstream塊,并取名為 myserver;
在 location塊中設置 反向道理到myserver;

http {# load balance config upstream myserver {server 192.168.163.201:8080;server 192.168.163.204:8080;}include mime.types;default_type application/octet-stream;sendfile on;#tcp_nopush on;#keepalive_timeout 0;keepalive_timeout 65;#gzip on;server {listen 80;server_name 192.168.163.204;location / {proxy_pass http://myserver;root html;index index.html index.htm;}location /test01 {proxy_pass http://myserver/test01/;}location /test02 {proxy_pass http://myserver/test02/;}}}
step2)執行效果

(請求被平均分發到 centos201 centos204 服務器)

3)負載均衡分發策略
策略1:輪詢(默認*)

按照請求時間先后順序分配到不同的后端服務器;如果后端服務器down掉,則自動剔除;

策略2:weight 權值 (默認值為1)
upstream myserver {server 192.168.163.201:8080 weight=10;server 192.168.163.204:8080 weight=20;}
策略3:ip hash方式(散列分發)

每個請求按照訪問 ip 的hash結果進行分配,這樣每個訪客在同一個ip都會被分發到固定的服務器

upstream myserver {ip_hash; server 192.168.163.201:8080;server 192.168.163.204:8080;}
策略4: fair 公平分發

按照后端服務器的響應時間來分配,響應時間越短,則優先分配;

upstream myserver {fair;server 192.168.163.201:8080;server 192.168.163.204:8080; }

補充: fair是第三方模塊,需要重新安裝 依賴包;


【5】ngxinx配置實例-動靜分離

1)動靜分離定義

為了加快網頁解析速度,把動態頁面和靜態頁面由不同的服務器來解析,加快解析速度,降低原來單個服務器的壓力;
靜態資源,html,css,js;
動態資源,servlet,jsp;

更直白點: nginx處理靜態資源, tomcat處理動態資源

2)動靜分離實現策略(兩種策略)

策略1: 把靜態資源單獨放在獨立服務器上,主流推崇的方式;
策略2: 動態與靜態文件混合放在一起發布在同一臺服務器上,通過nginx來分開 ;

通過location 指定不同的后綴名實現不同的請求轉發; 通過expires 參數設置, 可以讓瀏覽器緩存過期時間 ,減少與服務器之間的請求和流量;

策略3:expires緩存靜態資源例子

若設置 expires為3d(3天),表示在3天內訪問某個靜態資源的請求, 若比對服務器該文件的最后修改時間沒有變化,則不會從服務器抓取,返回304狀態碼,讓瀏覽器從本地獲取資源; 若發送了變化,則服務器重新從發送資源到 瀏覽器,狀態碼200;

3)步驟
step1)nginx靜態資源

step2)nginx配置訪問靜態資源

nginx靜態資源準備及訪問 https://blog.csdn.net/PacosonSWJTU/article/details/119505771


【6】nginx配置高可用集群

1)高可用定義

若nginx是單個接口,則當nginx宕機了,請求無法順利進行;
若是高可用,則啟動一臺服務器節點宕機了,服務還是可以正常訪問;

1.1)高可用集群架構

1.2)高可用環境準備

step1)需要兩臺nginx 服務器;
安裝nginx, https://blog.csdn.net/PacosonSWJTU/article/details/119479024 ;
安裝tomcat, https://blog.csdn.net/PacosonSWJTU/article/details/119487438 ;

step2)需要keepalived ;
兩臺機器都要裝 keepalived
yum -y install keepalived ;
rpm -q -a keepalived 查看是否安裝成功;

[root@centos205 nginx]# rpm -q -a keepalived keepalived-2.1.5-6.el8.x86_64

其配置文件在 /etc/keepalived/ 目錄 下;

[root@centos205 nginx]# cd /etc/keepalived/ [root@centos205 keepalived]# pwd /etc/keepalived [root@centos205 keepalived]# ll 總用量 4 -rw-r--r--. 1 root root 3550 1月 27 2021 keepalived.conf
2)高可用集群配置
step1) 修改keepalived配置

/etc/keepalived/keepalived.conf
centos204 MASTER

! Configuration File for keepalivedglobal_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.locsmtp_server 192.168.163.204 smtp_connect_timeout 30router_id LVS_DEVEL # /etc/hosts 添加 127.0.0.1 LVS_DEVEL }vrrp_script chk_http_port {script "/usr/script/nginx/nginx_check.sh" interval 2 # 檢測腳本執行間隔時間weight 2 }vrrp_instance VI_1 {state MASTER # MASTER OR BACKUPinterface ens160 virtual_router_id 51 # 主從機器的virtual_route_id 必須相同priority 100 # 主從機器的優先級,主機值較大, 從機較小advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.163.200 # 虛擬ip地址 主從機器配置相同} }

centos205 SLAVE

! Configuration File for keepalivedglobal_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.locsmtp_server 192.168.163.204 smtp_connect_timeout 30router_id LVS_DEVEL # /etc/hosts 添加 127.0.0.1 LVS_DEVEL }vrrp_script chk_http_port {script "/usr/script/nginx/nginx_check.sh"interval 2 # 檢測腳本執行間隔時間weight 2 }vrrp_instance VI_1 {state BACKUP # MASTER OR BACKUPinterface ens160 # 網卡 ifconfig 查看virtual_router_id 51 # 主從機器的virtual_route_id 必須相同priority 90 # 主從機器的優先級,主機值較大, 從機較小advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.163.200 # 虛擬ip地址 主從機器配置相同} }

/usr/script/nginx/nginx_check.sh 檢測master是否存活的腳本;

#!/bin/bash A=`ps -C nginx -no-header | wc -l` if [ $A -eq 0 ]; then/usr/sbin/nginxsleep 2if [ `ps -C nginx --no-header | wc -l` -eq 0 ]; thenkillall keepalivedfi fi
step2)啟動兩臺服務器的 nginx 和 keepalived
  • 啟動nginx: nginx;
  • 啟動keepalived: systemctl start keepalived.service
  • 停止nginx: nginx -s stop;
  • 停止 keepalived: systemctl stop keepalived.service
3)執行效果
3.1)訪問虛擬ip 192.168.163.200

http://192.168.163.200/www2/home.html 可用;

3.2)停用 centos205機器的 nginx 和 keepalived;
[root@centos205 keepalived]# nginx -s stop [root@centos205 keepalived]# systemctl stop keepalived.service
3.3)再次訪問虛擬ip 192.168.163.200成功

再次訪問 192.168.163.200 成功,因為 centos205 宕機,當因為centos204 , centos205 屬于高可用集群,所以centos204繼續提供服務;

【7】nginx小結

1)1個master和多個worker進程好處

好處1: 可以使用 nginx-s reload 熱部署;
好處2: 每個worker 是獨立的進程,如果有其中一個worker 出現問題,其他worker是獨立的,會繼續進行爭搶,實現請求過程,不會造成服務中斷;

2)設置多少個worker進程合適

worker進程數量與cpu核數相等是最為合適的;

worker_processes 4; // nginx.conf 中進行配置
3)連接數 worker_connection

問題1: 發送一個請求,占用了worker進程的幾個連接數 ? 2個
客戶端請求nginx (第1個連接), nginx請求tomcat(第2個連接) ;
問題2: nginx中有1個 master,4個worker進程; 每個worker進程 支持的最大連接數是 1024 ; 那worker支持的最大并發數是多少?4*1024/2 = 2k

// nginx.conf 中的events 塊中設置 events {worker_connections 1024; # 每個worker進程的最大連接數 }

總結

以上是生活随笔為你收集整理的nginx学习小结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。