Nginx 笔记与总结(15)nginx 实现反向代理 ( nginx + apache 动静分离)
在 nginx 中,proxy 用來實現(xiàn)反向代理,upstream 用來實現(xiàn)負載均衡。
例如有兩臺服務(wù)器,nginx 服務(wù)器作為代理服務(wù)器,執(zhí)行 .html 文件,apache 服務(wù)器上執(zhí)行 .php 文件,客戶端發(fā)來的請求首先發(fā)送給 nginx 服務(wù)器,如果發(fā)送請求的是 .php 文件,則把請求通過 proxy pass 轉(zhuǎn)發(fā)給 apache 服務(wù)器,apache 服務(wù)器處理后把結(jié)果返回給 nginx 服務(wù)器,nginx 服務(wù)再把結(jié)果返回給客戶端。該例中 nginx 服務(wù)器實現(xiàn)了反向代理,或者說實現(xiàn)了 nginx + apache 的動靜分離。 ?
?
配置過程:
① 首先不讓 nginx 服務(wù)器執(zhí)行 .php 文件,修改 /usr/local/nginx/conf/nginx.conf 文件,把以下 location 段注釋:
location ~ \.php$ {#root html;#fastcgi_pass 127.0.0.1:9000;#fastcgi_index index.php;#fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;#include fastcgi_params;}保存退出。平滑重啟 nginx。
此時訪問?http://192.168.254.100/test.php:
nginx 已經(jīng)不能解析 .php 文件了。
?
② 編輯 apache 的配置文件?httpd.conf
[root@localhost nginx]# find / -name httpd /usr/local/apache2/bin/httpd /root/httpd-2.2.21/httpd /root/httpd-2.2.21/.libs/httpd [root@localhost nginx]# vim /usr/local/apache2/conf/httpd.conf修改監(jiān)聽端口(nginx 已經(jīng)監(jiān)聽 80 端口,所以把 apache 的監(jiān)聽端口改為 8080):Listen 8080
保存退出。
?
③ 啟動 apache:
[root@localhost nginx]# /usr/local/apache2/bin/apachectl start?
訪問?http://192.168.254.100:8080:
?
?
④ 配置 apache 的虛擬主機及端口:
[root@localhost nginx]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf?修改 httpd-vhosts.conf:
NameVirtualHost *:8080# # VirtualHost example: # Almost any Apache directive may go into a VirtualHost container. # The first VirtualHost section is used for all requests that do not # match a ServerName or ServerAlias in any <VirtualHost> block. # <VirtualHost *:8080>DocumentRoot "/usr/local/nginx/html"ServerName test.com </VirtualHost>把 DocumentRoot 定義到 /usr/local/nginx/html 目錄下。保存退出。
?
編輯?httpd.conf:
把
<Directory />Options FollowSymLinksAllowOverride NoneOrder deny,allowDeny from all </Directory>改為
<Directory />Options FollowSymLinksAllowOverride allOrder deny,allowAllow from all </Directory>?
把 line:151
AllowOverride None改為
AllowOverride All保存退出。重啟 apache。
?
⑤ 測試:訪問?http://192.168.254.100:8080
?
?
訪問?http://192.168.254.100:8080/ecshop/
?
?
?
⑥ 配置 nginx 的反向代理
[root@localhost nginx]# vim conf/nginx.confnginx.conf,修改 location ~ \.php$,只需要添加一句:proxy_pass 192.168.254.100:8080;
location ~ \.php$ {proxy_pass http://192.168.254.100:8080;#root html;#fastcgi_pass 127.0.0.1:9000;#fastcgi_index index.php;#fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;#include fastcgi_params;}?保存退出。平滑重啟 nginx。
?
測試動靜分離:此時訪問?http://192.168.254.100/test.php
也就是說,此時的 url 不帶 8080 端口,訪問 .php 文件,同樣能夠解析,而且是通過 apache 進行解析。
?
測試動靜分離 2:
修改 /usr/local/nginx/html/test.php
[root@localhost nginx]# vim html/test.phptest.php:
<?php //phpinfo(); echo rand(1,100000); ?> <img src='image/nginx.png'>保存退出。
?
再次訪問?http://192.168.254.100/test.php
此時分析 apache 日志:
[root@localhost nginx]# tail -f /usr/local/apache2/logs/access_logaccess.log:
apache 沒有響應(yīng)圖片。
?
再分析 nginx 日志:
[root@localhost nginx]# tail -f /usr/local/nginx/logs/access.lognginx 響應(yīng)的圖片。
?
總結(jié)
以上是生活随笔為你收集整理的Nginx 笔记与总结(15)nginx 实现反向代理 ( nginx + apache 动静分离)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 拿什么来拯救你,我的table
- 下一篇: eclipse中使用svn提交,更新代码