[TOC] ## apache与nginx的区别 > nginx本身只能处理静态页的解析,如果要解析动态页面的话,需要用到反向代理的功能 > nginx有**反向代理功能**,能做负载均衡。apache没有 > nginx更轻量级,占用的内存很小。而apache更稳定 > nginx更适合高并发,因为nginx处理请求属于异步非阻塞的,可以多个连接(万级别)对应一个进程。而apache 则是阻塞型的,一个连接对应一个进程。 > nginx 处理 静态资源 性能高于apache,处理 动态语言 性能低于apache,因为nginx处理动态语言经过的层次太多了。 ![](https://box.kancloud.cn/b2c8983a7ef36e3294da56cf03fea8f4_1508x414.png) > **A**. 使用nginx的反向代理将请求转发到php-fpm -> **B**.fastcgi进程管理器(php-fpm)收到请求后选择并连接一个cgi解释器 ## nginx的两种负载均衡方式 > 轮询加权(也可以不加权,就是1:1负载)和 > ip_hash(根据ip分配后端服务器,解决session问题) ``` // 轮询加权 upstream lb { server 192.168.196.130 weight=1; server 192.168.196.132 weight=2; } // ip_hash轮询 upstream lb { server 192.168.196.130; server 192.168.196.132; ip_hash; } ``` ## 服务器环境假设 > 假设 > 192.168.1.111(主) -> 安装有LNMP,进行负载均衡控制 > 192.168.1.112(从) -> 安装有LNMP,进行应用运行 > 192.168.1.113(从) -> 安装有LNMP,进行应用运行 ## LNMP的安装 > 每台服务器都安装LNMP > 参考:https://www.kancloud.cn/wangking/linux/280755 ## 负载均衡配置 ### 主服务器(192.168.1.111)负载均衡配置 > vim /opt/nginx/conf/vhosts/zhuifanba.conf ``` upstream load_balance{ # 设置负载均衡的机器列表(采用轮询的方式) server 192.168.1.112:80; #从服务器1 server 192.168.1.113:80; #从服务器2 } server { listen 80; server_name www.zhuifanba.com; location / { #设置反向代理 proxy_pass http://load_balance; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location ~ .*\.(php|php5)?$ { #设置反向代理 proxy_pass http://load_balance; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ { # 设置静态文件的反向代理 proxy_pass http://load_balance; expires 30d; } location ~ .*\.(js|css)?$ { # 设置静态文件的反向代理 proxy_pass http://load_balance; expires 1h; } } ``` ### 从服务器(192.168.1.112~113)运行环境配置 > vim /opt/nginx/conf/vhosts/zhuifanba.conf ``` server { listen 80; server_name www.zhuifanba.com; index index.html index.htm index.php; root /var/www/zhuifanba/frontend/web; location / { if (!-e $request_filename){ rewrite ^/(.*) /index.php last; } } location ~ .*\.(php|php5)?$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /var/www/zhuifanba/frontend/web$fastcgi_script_name; include fastcgi.conf; } location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ { expires 30d; } location ~ .*\.(js|css)?$ { expires 1h; } error_log /var/log/zhuifanba.error.log; access_log /var/log/zhuifanba.access.log; } ```