nginx是一個http的web伺服器,可以將伺服器上的靜態文件(html、css、圖片)透過HTTP協定傳回瀏覽器用戶端。
範例:我們在伺服器上部署一個靜態資源index.html
#將index.html上傳到linux /opt/www/test
修改nginx.conf 增加一個location,攔截/test的請求,root 對應的/opt/www路徑代表根路徑,也就是/test前面的/斜線
location /test { root /opt/www; index index.html; }
啟動nginx或重新載入nginx
#我們造訪下:http://192.168.253.130/test/
負載平衡可以分為硬體負載平衡與軟體負載平衡
硬體負載平衡,例如F5、深信服、Array等,優點是有廠商專業團隊支持,效能穩定;缺點是價格昂貴
軟體負載均衡,例如Nginx、LVS、HAProxy等,優點是免費開源,成本低廉
輪詢法:將請求輪流分配到後端伺服器上,它平衡地對待後端的每一台伺服器,而不關心伺服器實際的連線數和目前的系統負載。
http { upstream test{ ##后端实际服务器 nginx在轮询访问以下几台服务器 server 10.100.30.1:8080; server 10.100.30.2:8080; server 10.100.30.3:8080; server 10.100.30.4:8080; } server { ##前端拦截入口 listen 80; server_name www.test.com; location / { proxy_pass http://test; } } }
加權輪詢法:不同的後端伺服器可能機器的設定和目前系統的負載並不相同,因此它們的抗壓能力也不相同。
給配置高、負載低的機器配置更高的權重,讓其處理更多的請;而配置低、負載高的機器,給其分配較低的權重,降低其係統負載,加權輪詢能很好地處理這個問題,並將請求順序且按照權重分配到後端。
http { upstream test{ ##后端实际服务器 nginx在轮询访问以下几台服务器 server 10.100.30.1:8080 weight=1; server 10.100.30.2:8080 weight=3; server 10.100.30.3:8080 weight=1; server 10.100.30.4:8080 weight=1; } server { ##前端拦截入口 listen 80; server_name www.test.com; location / { proxy_pass http://test; } } }
來源位址雜湊法:根據取得客戶端的IP位址,透過雜湊函數計算得到一個數值,用該數值對伺服器清單的大小進行取模運算,得到的結果就是客服端要存取伺服器的序號。
採用來源位址雜湊法進行負載平衡,同一IP位址的客戶端,當後端伺服器清單不變時,它每次都會對應到同一台後端伺服器進行存取。
upstream test{ ip_hash; server 10.100.30.1:8080 weight=1; server 10.100.30.2:8080 weight=3; server 10.100.30.3:8080 weight=1; server 10.100.30.4:8080 weight=1; }
最小連線數法:由於後端伺服器的設定不盡相同,對於請求的處理有快有慢,最小連線數法根據後端伺服器目前的連線情況,動態地選取其中目前積壓連接數最少的一台伺服器來處理目前的請求,盡可能地提高後端服務的利用效率,將負責合理地分流到每一台伺服器。
upstream test{ least_conn; server 10.100.30.1:8080; server 10.100.30.2:8080; server 10.100.30.3:8080; server 10.100.30.4:8080; }
down:表示停掉某台服務
upstream test{ server 10.100.30.1:8080 down; server 10.100.30.2:8080; server 10.100.30.3:8080; server 10.100.30.4:8080; }
backup:指定備用伺服器,正常情況下只要有其他伺服器能正常訪問,備用伺服器不會被訪問到,只有其他伺服器都掛掉的時候,才會使用備用伺服器,所以採用這種方式一般用來實現熱部署,先把程式碼更新到備用伺服器上,然後停掉正常伺服器,正常伺服器部署完成後,備用伺服器又處於等待狀態,整個部署過程使用戶能夠感受不到停機。
upstream test{ server 10.100.30.1:8080 backup; server 10.100.30.2:8080 backup; server 10.100.30.3:8080; server 10.100.30.4:8080; }
靜態代理程式
#動靜分離
Nginx的使用場景及範例
Nginx是一款高效能、高並發的HTTP伺服器和反向代理伺服器,可用於靜態資源伺服器、負載平衡器、反向代理、快取伺服器、Web伺服器等多種場景。
1.靜態資源伺服器
#在使用Nginx作為靜態資源伺服器時,Nginx會直接傳回請求的文件,從而減輕Web伺服器的負擔。這種場景通常用於提供靜態文件下載或影片等大檔案的存取。
下面是一個範例Nginx設定:
server { listen 80; server_name example.com; location / { root /usr/share/nginx/html; index index.html index.htm; } location /images/ { alias /var/www/images/; } location /downloads/ { alias /var/www/downloads/; } }
upstream backend { server backend1.example.com:8080 weight=3; server backend2.example.com:8080; } server { listen 80; server_name example.com; location / { proxy_pass http://backend; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }
上述配置中,Nginx会将访问根目录(/)的请求转发给后端的Web服务器(backend1.example.com和backend2.example.com),其中backend1.example.com的权重为3,backend2.example.com的权重为1,表示backend1.example.com的处理能力更强。
在转发请求时,Nginx还会设置HTTP头信息中的Host和X-Real-IP字段,从而隐藏Web服务器的真实IP。
在使用Nginx作为负载均衡器时,Nginx会将请求均衡地分发到多个Web服务器上,从而实现高并发、高可用的服务。这种场景通常用于Web应用程序的集群部署、分布式系统的部署等。下面是一个示例Nginx配置:
upstream backend { server backend1.example.com:8080; server backend2.example.com:8080; server backend3.example.com:8080; } server { listen 80; server_name example.com; location / { proxy_pass http://backend; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }
上述配置中,Nginx会将请求均衡地分发到三个Web服务器(backend1.example.com、backend2.example.com和backend3.example.com)上,从而实现负载均衡。
在转发请求时,Nginx还会设置HTTP头信息中的Host和X-Real-IP字段,从而隐藏Web服务器的真实IP。
在使用Nginx作为缓存服务器时,Nginx会缓存Web服务器返回的响应,从而减少对Web服务器的请求。这种场景通常用于提高Web应用程序的性能、降低Web服务器的负载等。下面是一个示例Nginx配置:
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m inactive=60m; server { listen 80; server_name example.com; location / { proxy_cache my_cache; proxy_pass http://backend; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }
上述配置中,Nginx会将Web服务器返回的响应缓存到/var/cache/nginx/my_cache目录下,并设置缓存有效期为60分钟。在缓存命中时,Nginx会直接返回缓存的响应,从而减少对Web服务器的请求。
总之,Nginx具有很强的可扩展性和灵活性,可以根据不同的需求配置不同的使用场景。以上仅是一些示例,实际应用中还有很多其他的使用场景。
在使用Nginx作为反向代理服务器时,Nginx会将客户端请求转发到后端的Web服务器上,并将后端服务器返回的响应转发给客户端。这种场景通常用于隐藏后端服务器的真实IP、提高Web应用程序的可用性等。下面是一个示例Nginx配置:
server { listen 80; server_name example.com; location / { proxy_pass http://backend; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }
上述配置中,Nginx会将客户端请求转发到http://backend上,并设置HTTP头信息中的Host和X-Real-IP字段,从而隐藏后端服务器的真实IP。
在使用Nginx作为WebSocket服务器时,Nginx会将客户端请求转发到后端的WebSocket服务器上,并实现WebSocket协议的连接管理。这种场景通常用于实时通信、游戏等应用程序。
下面是一个示例Nginx配置:
map $http_upgrade $connection_upgrade { default upgrade; '' close; } server { listen 80; server_name example.com; location / { proxy_pass http://backend; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }
上述配置中,Nginx会将WebSocket请求转发到http://backend上,并设置HTTP头信息中的Upgrade、Connection、Host和X-Real-IP字段,从而实现WebSocket协议的连接管理。
总之,Nginx具有很多的使用场景,可以根据不同的需求配置不同的服务器功能。以上仅是一些示例,实际应用中还有很多其他的使用场景。
以上是Nginx中的主要應用場景是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!