前nginx後Apache+Node反向代理

前幾天一直在被一個問題困擾,機器上跑的站點太多了,Apache上面有十幾個,NodeJS的也有一堆,記端口號都要煩死,因而萌生了使用反向代理的想法。出發點貌似太low了,徹底不是出於負載均衡、高併發什麼的考慮,就是爲了避免記端口號nginx

最開始是使用Apache作的,由於使用的Mac安裝mod_proxy及繁雜的配置搞得要死,關鍵是還失敗了。。。(失敗緣由另說),江湖傳言nginx作反向代理配置簡單,嘗試了一下nginx,果不其然web

工做原理

剛入行的小夥伴可能會問什麼事反向代理?爲何使用反向代理就不用急端口號了?apache

正向代理

瞭解反向代理以前先了解一下正向代理,正向代理就是咱們平時理解的代理,舉個例子後端

  1. 在國內我不能訪問caoliu
  2. 可是我有一臺在美國的VPS,能夠訪問各類xxoo網站
  3. 因而我向VPS發請求,我要看caoliu
  4. VPS獲取caoliu內容,而後返回給我

VPS就是代理,這個過程就是正向代理瀏覽器

正向代理 是一個位於客戶端和原始服務器之間的服務器,爲了從原始服務器取得內容,客戶端向代理髮送一個請求並指定目標(原始服務器),而後代理向原始服務器轉交請求並將得到的內容返回給客戶端。客戶端必需要進行一些特別的設置才能使用正向代理服務器

反向代理

仍是舉個例子,caoliu的域名常常會變,並且會提供多個域名,一個域名被牆掉了,能夠用其它的,可是訪問每一個域名返回的內容都是同樣的,並且頁面也沒有重定向網絡

其實咱們訪問xx.xxx.cl的時候,該域名的web服務器沒有向咱們直接返回內容,而是本身向caoliu的真正主機發送請求,而後把請求結果給咱們併發

反向代理對於客戶端而言它就像是原始服務器,而且客戶端不須要進行任何特別的設置。客戶端向反向代理的命名空間中的內容發送普通請求,接着反向代理將判斷向何處(原始服務器)轉交請求,並將得到的內容返回給客戶端,就像這些內容 本來就是它本身的同樣負載均衡

區別&用途

其實明白了原理二者的區別很明顯了,能夠簡單的這樣區分正向代理和反向代理ide

反向代理對訪問者時透明的(你以爲xx.xxx.cl就是caoliu的服務器地址了,實際不是,你看不出來),正向代理訪問着須要特殊設置(否則怎麼看youtube)

正向代理的典型用途是爲在防火牆內的局域網客戶端提供訪問Internet的途徑。正向代理還可使用緩衝特性減小網絡使用率。反向代理的典型用途是將 防火牆後面的服務器提供給Internet用戶訪問。反向代理還能夠爲後端的多臺服務器提供負載平衡,或爲後端較慢的服務器提供緩衝服務。

看到這裏是否是明白了我想怎麼作?

原來我有三個網站

  1. localhost:8080
  2. localhost:9000
  3. localhost:8000

我要使用nginx作個設置,都使用80端口,免去我輸入端口號的苦惱

  1. 當我訪問 xxx的時候給我代理到localhost:8080
  2. 當我訪問 yyy的時候給我代理到localhost:9000
  3. 當我訪問 zzz的時候給我代理到localhost:8000

Apache配置各個站點

修改httpd.conf

Mac 下Apache的配置文件在

/etc/apache2/httpd.conf

咱們設置三個虛擬主機,修改配置文件,去掉加載虛擬主機配置的註釋#

Include /private/etc/apache2/extra/httpd-vhosts.conf

監聽對應的端口(不要監聽80了,一下子交給nginx)

Listen 8000
Listen 8080
Listen 9000

修改httpd-vhosts.conf

虛擬主機的配置文件在

/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>

修改hosts文件

若是服務器在本地,咱們還須要把域名配置到localhost,Mac下hosts的配置文件在

/etc/hosts

簡單添加一下咱們的三個主機

localhost xxx yyy zzz

修改nginx配置文件

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了,不用端口號了

相關文章
相關標籤/搜索