Nginx 反向代理、負載均衡
## Nginx 反向代理。
(一)簡介
一、什麼是代理伺服器
客戶機原本發送給伺服器的請求,不會直接發送給伺服器,而是先發送給代理伺服器;經過代理伺服器處理後轉發給伺服器;伺服器數據處理後轉回給代理伺服器,代理伺服器再返回給客戶機的一個過程。
二、代理伺服器的作用
1. 防火牆作用
由於所有的客戶機請求都必須通過代理伺服器訪問遠程站點,因此可在代理伺服器上設限,過濾某些不安全信息;
2. 提高Web訪問速度
可以緩存真實Web伺服器上的某些靜態資源,減輕真實Web伺服器的負載壓力;
3. 實現負載均衡
內部可以採用多台伺服器來組成伺服器集群,外部還是可以採用一個地址訪問;
(二)架構思路
一、架構圖
先來分析這張圖:
1. 用戶會訪問 「10.167.167.167(默認80埠)」 。
2. Nginx收到 PC 端的HTTP請求。
3. Nginx根據配置將請求負載到 三台Apache的機子上去。
4. Apache伺服器將數據處理後返回給Nginx。
5. Nginx將數據返回PC
(二)看完以上的分析後,可能大家有會幾個問題:
1. 為什麼使用Nginx做代理伺服器?
a) 輕量級,同樣起web 服務,比apache 佔用更少的內存及資源;
b) 非阻塞、高並發連接:數據複製時,磁碟I/O的第一階段是非阻塞的。官方測試能夠支撐5萬並發連接,在實際生產環境中跑到2~3萬並發連接數;
2. 為什麼使用Apache後台伺服器?
a) rewrite ,比nginx 的rewrite 強大;
b) 少bug ,nginx 的bug 相對較多;
c) 穩定
三、架構實戰
(一) Nginx、Apache 安裝
1. http://www.cnblogs.com/bluebirds/p/6386649.html(這是之前講到的在window安裝nginx的案例, Linux也很簡單,這裡就不做多講了)
(二)Nginx配置
1. Nginx.conf
進程數與每個進程的最大連接數
Nginx進程數,建議設置為等於CPU總核心數
單個進程最大連接數,那麼該伺服器的最大連接數 = 連接數 * 進程數
#user apache;
worker_processes 4; # 工作進程的個數
events {
use epoll;
worker_connections 1024; # 單個進程的連接數
}
http {
# 伺服器集群(Apache) weight 分配權重 權重越大 分配概率越高.
upstream php_pool{
server 192.168.10.101:8080 max_fails=0 fail_timeout=30s weight=1;
server 192.168.10.102:8080 max_fails=0 fail_timeout=30s weight=1;
server 192.168.10.103:8080 max_fails=0 fail_timeout=30s weight=2;
}
}
server {
listen 80;
server_name www.test.com; # 域名 本地
access_log /data/www/logs/nginx_log/access/www.test.com_access.log main ;
error_log /data/www/logs/nginx_log/error/www.test.com_error.log ;
root /data/www/vhosts/www.test.com/httpdocs ;
index index.html index.php;
error_page 404 403 /404.html;
location ~ .php$ {
proxy_pass http://php_pool; # 服務集群池
include proxy_params;
expires -1;
}
location / {
include proxy_params;
if (!-d $request_filename){
set $flag 1$flag;
}
if (!-f $request_filename){
set $flag 2$flag;
}
if ($flag = "21"){
proxy_pass http://php_pool;
expires -1;
}
}
}
以上就是 反向代理的配置,只要理解服務的訪問過程及原理,應該是不難的。
四、學習總結
本章藉助Nginx 和 Apache 搭建了反向代理伺服器,實在的基本的負載均衡。
在目前大多數的應用中,都會將Nginx部署在Linux伺服器中,並且會做一些針對負載均衡的優化配置;
經過這次也更加深入的了解了 Nginx 和 Apache 服務配置兩種服務的優缺點,能夠更準確的在場景中運用。
※ASP.NET CORE小試牛刀:乾貨
※擴展SQLite使其能從apk文件中讀取db
※業餘草教你解讀Spark源碼閱讀之HistoryServer
TAG:達人科技 |
※Nginx反向代理和負載均衡部署指南
※nginx 負載均衡
※負載均衡-Ribbon 的負載均衡策略
※網站集群架構實戰(LVS負載均衡Nginx代理緩存Nginx動靜分離等)
※Feign實現和負載均衡
※Django(Ngnix)項目部署 負載均衡
※Keepalived+Nginx實現負載均衡高可用
※nginx負載均衡與調度演算法
※Linux下Nginx+多Tomcat負載均衡實現詳解
※fabio負載均衡入門
※史上最詳細的Nginx負載均衡教程
※在 Linux 上用 DNS 實現簡單的負載均衡
※搭建高可用負載均衡器:haproxy+keepalived
※負載均衡zookpeer之輪詢演算法
※LVS/DR+keepalived負載均衡實現
※Ansible自動部署nginx+keepalived高可用負載均衡
※Spring Cloud客戶端負載均衡Ribbon筆記
※負載均衡session共享的三種處理方法
※Portworx與HPE合作為容器工作負載提速
※Facebook開源Katran負載均衡器並公開Provisioning Tool