前幾天一直在被一個問題困擾,機器上跑的站點太多了,Apache上面有十幾個,NodeJS的也有一堆,記端口號都要煩死,因而萌生了使用反向代理的想法。出發點貌似太low了,徹底不是出於負載均衡、高併發什麼的考慮,就是爲了避免記端口號nginx
最開始是使用Apache作的,由於使用的Mac安裝mod_proxy及繁雜的配置搞得要死,關鍵是還失敗了。。。(失敗緣由另說),江湖傳言nginx作反向代理配置簡單,嘗試了一下nginx,果不其然web
剛入行的小夥伴可能會問什麼事反向代理?爲何使用反向代理就不用急端口號了?apache
瞭解反向代理以前先了解一下正向代理,正向代理就是咱們平時理解的代理,舉個例子後端
VPS就是代理,這個過程就是正向代理瀏覽器
正向代理 是一個位於客戶端和原始服務器之間的服務器,爲了從原始服務器取得內容,客戶端向代理髮送一個請求並指定目標(原始服務器),而後代理向原始服務器轉交請求並將得到的內容返回給客戶端。客戶端必需要進行一些特別的設置才能使用正向代理服務器
仍是舉個例子,caoliu的域名常常會變,並且會提供多個域名,一個域名被牆掉了,能夠用其它的,可是訪問每一個域名返回的內容都是同樣的,並且頁面也沒有重定向網絡
其實咱們訪問xx.xxx.cl的時候,該域名的web服務器沒有向咱們直接返回內容,而是本身向caoliu的真正主機發送請求,而後把請求結果給咱們併發
反向代理對於客戶端而言它就像是原始服務器,而且客戶端不須要進行任何特別的設置。客戶端向反向代理的命名空間中的內容發送普通請求,接着反向代理將判斷向何處(原始服務器)轉交請求,並將得到的內容返回給客戶端,就像這些內容 本來就是它本身的同樣負載均衡
其實明白了原理二者的區別很明顯了,能夠簡單的這樣區分正向代理和反向代理ide
反向代理對訪問者時透明的(你以爲xx.xxx.cl就是caoliu的服務器地址了,實際不是,你看不出來),正向代理訪問着須要特殊設置(否則怎麼看youtube)
正向代理的典型用途是爲在防火牆內的局域網客戶端提供訪問Internet的途徑。正向代理還可使用緩衝特性減小網絡使用率。反向代理的典型用途是將 防火牆後面的服務器提供給Internet用戶訪問。反向代理還能夠爲後端的多臺服務器提供負載平衡,或爲後端較慢的服務器提供緩衝服務。
看到這裏是否是明白了我想怎麼作?
原來我有三個網站
我要使用nginx作個設置,都使用80端口,免去我輸入端口號的苦惱
xxx
的時候給我代理到localhost:8080
yyy
的時候給我代理到localhost:9000
zzz
的時候給我代理到localhost:8000
Mac 下Apache的配置文件在
/etc/apache2/httpd.conf
咱們設置三個虛擬主機,修改配置文件,去掉加載虛擬主機配置的註釋#
Include /private/etc/apache2/extra/httpd-vhosts.conf
監聽對應的端口(不要監聽80了,一下子交給nginx)
Listen 8000 Listen 8080 Listen 9000
虛擬主機的配置文件在
/etc/apache2/extra/httpd-vhosts.conf
添加虛擬主機節點,相似這樣來三個
<VirtualHost *:8080> DocumentRoot "/path" ServerName xxx <Directory "/path"> Options Indexes FollowSymLinks AllowOverride All Order deny,allow Allow from all </Directory> </VirtualHost>
若是服務器在本地,咱們還須要把域名配置到localhost,Mac下hosts的配置文件在
/etc/hosts
簡單添加一下咱們的三個主機
localhost xxx yyy zzz
Mac下使用homebrew安裝的nginx配置文件在
/usr/local/etc/nginx/nginx.conf
而後添加Server節點
server { listen 80; server_name xxx; location /{ proxy_pass http://127.0.0.1:8080; proxy_set_header Host $host; } }
proxy_set_header Host $host
可使url始終保持配置的xxx等
這樣重啓nginx、Apache後在瀏覽器上輸入xxx/
就能夠直接代理到http://127.0.0.1:8080
了,不用端口號了