1.反向代理
2.負載平衡
3.HTTP伺服器(包含動靜分離)
4.正向代理以上就是我了解到的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種常用的第三方策略。
每個請求依時間順序逐一分配到不同的後端伺服器,如果後端伺服器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; } }
負載平衡的核心程式碼為
upstream test { server localhost:8080; server localhost:8081; }
這裡我配置了2台伺服器,當然實際上是一台,只是連接埠不一樣而已,而8081的伺服器是不存在的,也就是說訪問不到,但是我們訪問http://localhost 的時候,也不會有問題,會默認跳到http://localhost:8080 具體是因為Nginx會自動判斷伺服器的狀態,如果伺服器處於無法存取(伺服器掛了),就不會跳到這台伺服器,所以也避免了一台伺服器掛了影響使用的情況,由於Nginx預設是RR策略,所以我們不需要其他更多的設定。
指定輪詢幾率,weight和存取比率成正比,用於後端伺服器效能不均的情況。例如
upstream test { server localhost:8080 weight=9; server localhost:8081 weight=1; }
那麼10次一般只會有1次會訪問到8081,而有9次會訪問到8080
上面的2種方式都有一個問題,那就是下一個請求來的時候請求可能分發到另外一個伺服器,當我們的程式不是無狀態的時候(採用了session保存資料),這時候就有一個很大的很問題了,例如把登入資訊儲存到了session中,那麼跳到另外一台伺服器的時候就需要重新登入了,所以很多時候我們需要一個客戶只訪問一個伺服器,那麼就需要用ip_hash了,ip_hash的每個請求按存取ip的hash結果分配,這樣每個訪客固定存取一個後端伺服器,可以解決session的問題。
upstream test { ip_hash; server localhost:8080; server localhost:8081; }
按後端伺服器的回應時間來分配請求,回應時間短的優先分配。
upstream backend { fair; server localhost:8080; server localhost:8081; }
按存取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安裝第三方模組不會再本文介紹
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从新读取配置的命令是
nginx -s reload
windows下面就是
nginx.exe -s reload
以上是Nginx的主要應用場景有哪些的詳細內容。更多資訊請關注PHP中文網其他相關文章!