反向代理實踐
nginx + substitutions 安裝
nginx 自帶一個Substitution模塊,但該模塊只能寫一行,所以我們改用 substitutions
下面是安裝一些預備軟件
- yum -y --noplugins install wget zip
- yum -y --noplugins install unzip
- yum -y --noplugins install gcc
- yum -y --noplugins install make
- yum -y --noplugins install pcre-devel
- yum -y --noplugins install openssl-devel
編譯軟件
- tar zxf nginx-1.0.8.tar.gz
- cd nginx-1.0.8
- ./configure ./configure --add-module=path/substitutions4nginx-read-only //注意這裡的path是相對應的真實路徑
- make
- make install
- 配置 nginx.conf
此時,nginx應該安裝在於 /usr/local/nginx 下面 - server_name servername;
- location / {
- subs_filter ca-pub-********** ca-pub-**********; //把google ad 的用戶號 ca-pub-9805743306566114 改成你自己的,比如 ca-pub-**********
- subs_filter ********** **********; //把google ad 的廣告號 **********改成你自己的,比如 **********,你懂的!:D
- proxy_pass 這裡是填寫需要代理的網址; //反向代理站。
- index index.html index.htm;
- }
記住subs_filter 命令的格式即可隨意發揮想象力替換你想替換的廣告、超鏈接,等等。
去掉反向代理煩人的前綴
使用nginx做反向代理的時候,可以簡單的直接把請求原封不動的轉發給下一個服務。設置proxy_pass請求只會替換域名,如果要根據不同的url後綴來訪問不同的服務,則需要通過如下方法:
方法一:加"/"
<code>server {
listen 8000;
server_name abc.com;
access_log "pipe:rollback /data/log/nginx/access.log interval=1d baknum=7 maxsize=1G" main;
location ^~/user/ {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://user/;
}
location ^~/order/ {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://order/;
}
}/<code>
^~/user/表示匹配前綴是user的請求,proxy_pass的結尾有/, 則會把/user/*後面的路徑直接拼接到後面,即移除user。
方法二:rewrite
<code>upstream user {
server localhost:8089 weight=5;
}
upstream order {
server localhost:8090 weight=5;
}
server {
listen 80;
server_name abc.com;
access_log "pipe:rollback /data/log/nginx/access.log interval=1d baknum=7 maxsize=1G" main;
location ^~/user/ {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-NginX-Proxy true;
rewrite ^/user/(.*)$ /$1 break;
proxy_pass http://user;
}
location ^~/order/ {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-NginX-Proxy true;
rewrite ^/order/(.*)$ /$1 break;
proxy_pass http://order;
}
}
/<code>
proxy_pass結尾沒有/, rewrite重寫了url。
閱讀更多 Java精英人才 的文章