nginx的主要功能介紹:
(推薦教學:nginx教學)
一、反向代理
反向代理應該是Nginx 做的最多的一件事了,什麼是反向代理呢,以下是百度百科的說法:反向代理(Reverse Proxy)方式是指以代理伺服器來接受internet上的連線請求,然後將請求轉送給內部網路上的伺服器,並將從伺服器上得到的結果傳回給internet 上請求連線的客戶端,此時代理伺服器對外就表現為一個反向代理伺服器。
簡單來說就是真實的伺服器不能直接被外部網路訪問,所以需要一台代理伺服器,而代理伺服器能被外部網路存取的同時又跟真實伺服器在同一個網路環境,當然也可能是同一台伺服器,連接埠不同而已。
下面貼上一段簡單的實現反向代理的程式碼:
server { listen 80; server_name localhost; client_max_body_size 1024M; location / { proxy_pass http://localhost:8080; proxy_set_header Host $host:$server_port; } }
儲存設定檔後啟動 Nginx,這樣當我們存取 localhost 的時候,就相當於訪問 localhost:8080 了。
二、負載平衡
負載平衡也是Nginx 常用的功能,負載平衡其意思就是分攤到多個作業單元上執行,例如:Web伺服器、FTP伺服器、企業關鍵應用伺服器和其它關鍵任務伺服器等,從而共同完成工作任務。
簡單而言就是當有2台或以上伺服器時,根據規則隨機的將請求分發到指定的伺服器上處理,負載平衡配置一般都需要同時配置反向代理,透過反向代理跳轉到負載平衡。而Nginx目前支援自備3種負載平衡策略,還有2種常用的第三方策略。
1、RR(預設)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。 简单配置 upstream test { server localhost:8080; server localhost:8081; } server { listen 81; server_name localhost; client_max_body_size 1024M; location / { proxy_pass http://test; proxy_set_header Host $host:$server_port; } }
配置了2台伺服器,當然實際上是一台,只是連接埠不一樣而已,而8081的伺服器是不存在的,也就是說存取不到,但是我們造訪http://localhost 的時候也不會有問題,會預設跳到http://localhost:8080 具體是因為Nginx會自動判斷伺服器的狀態。
如果伺服器處於無法存取(伺服器掛了),就不會跳到這台伺服器,所以也避免了一台伺服器掛了影響使用的情況,由於Nginx 預設是RR策略,所以我們不需要其他更多的設定。
2、權重
指定輪詢幾率,weight和存取比率成正比,用於後端伺服器效能不均的情況。
例如:
upstream test { server localhost:8080 weight=9; server localhost:8081 weight=1; }
那麼10次一般只會有1次會訪問到8081,而有9次會訪問到8080。
3、ip_hash
上面的2種方式都有一個問題,那就是下一個請求來的時候請求可能分發到另外一個伺服器,當我們的程式不是無狀態的時候(採用了session保存資料),這時候就有一個很大的很問題了,例如把登入資訊儲存到了session中,那麼跳到另外一台伺服器的時候就需要重新登入了,所以很多時候我們需要一個客戶只訪問一個伺服器,那就需要用iphash了。
iphash的每個請求都按訪問ip的hash結果分配,這樣每個訪客固定訪問一個後端伺服器,可以解決session的問題。
upstream test { ip_hash; server localhost:8080; server localhost:8081; }
4、fair(第三方)
按後端伺服器的回應時間來分配請求,回應時間短的優先分配。
upstream backend { fair; server localhost:8080; server localhost:8081; }
5、url_hash(第三方)
按存取url的hash結果來分配請求,使每個url定向到同一個後端伺服器,後端伺服器為快取時比較有效。在upstream中加入hash語句,server語句中不能寫入weight等其他的參數,hash_method是使用的hash演算法。
upstream backend { hash $request_uri; hash_method crc32; server localhost:8080; server localhost:8081; }
以上5種負載平衡各自適用不同情況下使用,所以可以根據實際情況選擇使用哪種策略模式,不過fair和url_hash需要安裝第三方模組才能使用,由於本文主要介紹Nginx能做的事情,所以Nginx安裝第三方模組不會再本文介紹。
三、HTTP伺服器
Nginx本身也是一個靜態資源的伺服器,當只有靜態資源的時候,就可以使用Nginx來做伺服器,同時現在也很流行動靜分離,就可以透過Nginx來實現,首先看看Nginx做靜態資源伺服器。
server { listen 80; server_name localhost; client_max_body_size 1024M; location / { root e:\wwwroot; index index.html; } }
這樣如果訪問http://localhost 就會預設訪問到E碟wwwroot目錄下面的index.html,如果一個網站只是靜態頁面的話,那麼就可以透過這種方式來實現部署。
動靜分離
動靜分離是讓動態網站裡的動態網頁根據一定規則把不變的資源和經常變的資源區分開來,動靜資源做好了拆分以後,我們就可以根據靜態資源的特性將其做快取操作,這就是網站靜態化處理的核心想法。
upstream test{ server localhost:8080; server localhost:8081; } server { listen 80; server_name localhost; location / { root e:\wwwroot; index index.html; } # 所有静态请求都由nginx处理,存放目录为html location ~ \.(gif|jpg|jpeg|png|bmp|swf|css|js)$ { root e:\wwwroot; } # 所有动态请求都转发给tomcat处理 location ~ \.(jsp|do)$ { proxy_pass http://test; } error_page 500 502 503 504 /50x.html; location = /50x.html { root e:\wwwroot; } }
这样我们就可以把HTML以及图片和css以及js放到wwwroot目录下,而tomcat只负责处理jsp和请求,
例如当我们后缀为gif的时候,Nginx默认会从wwwroot获取到当前请求的动态图文件返回,当然这里的静态文件跟Nginx是同一台服务器。
我们也可以在另外一台服务器,然后通过反向代理和负载均衡配置过去就好了,只要搞清楚了最基本的流程,很多配置就很简单了,另外localtion后面其实是一个正则表达式,所以非常灵活。
四、正向代理
正向代理,意思是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端才能使用正向代理。
当你需要把你的服务器作为代理服务器的时候,可以用Nginx来实现正向代理,但是目前Nginx有一个问题,那么就是不支持HTTPS,虽然我百度到过配置HTTPS的正向代理,但是到最后发现还是代理不了,当然可能是我配置的不对。
resolver 114.114.114.114 8.8.8.8; server { resolver_timeout 5s; listen 81; access_log e:\wwwroot\proxy.access.log; error_log e:\wwwroot\proxy.error.log; location / { proxy_pass http://$host$request_uri; } }
resolver是配置正向代理的DNS服务器,listen 是正向代理的端口,配置好了就可以在ie上面或者其他代理插件上面使用服务器ip+端口号进行代理了。
注意:Nginx是支持热启动的,也就是说当我们修改配置文件后,不用关闭Nginx,就可以实现让配置生效。Nginx从新读取配置的命令是:nginx -s reload。
以上是nginx的主要功能介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!