nginx + 多apache 做反向代理實現負載均衡并設置二級域名

server.jpg

原文鏈接
在網上找了幾天時間,發現網上的方法都有一定的局限性,因為我想要的是在同一臺服務器上實現一個nginx做反向代理到多個apache(再一次感嘆網上好多教程的落后和千篇一律)。這里再次記錄本次的配置過程。

環境:Ubuntu14.04 server + nginx(1.4.6) + apache2(2.4.7)

目的:使用nginx做代理,分別代理到apache的四個監聽端口8080/8081/8082/8083 優點:Nginx可應付高并發,使用Proxy做代理效率也較高,占用資源少,再使用apache處理后端,也更穩定,現在一般的做法是是用nginx處理前端,apache處理后端,我這里暫時全部交由apache處理。當然,我這里都是在同一臺服務器上做的,除了減少單個apache的并發處理數量,對性能來說并沒有顯著的提升。

1.安裝nginx和apache2

安裝到沒什么好說的,直接apt-get安裝即可。

2.修改nginx的配置文件/etc/nginx/nginx.etc

在http字段(就是那個大括號里面)添加如下內容:

upstream balance{
    server localhost:8080;
    server localhost:8081;
    server localhost:8082;
    server localhost:8083;
}

server{
    listen 80;
    server_name haofly.net;
    localhost /{
        proxy_pass http://balance;
    }
}

其中nginx是讓upstream里面的各個IP/端口實現輪詢訪問,研究一下nginx的配置文件,還可以對輪詢訪問加上一些限制條件,比如輪訓機制、權值分配等,這里不做詳述。

需要注意的是如果是二級域名,那么upstream里面的server依然寫成localhost:port的形式,而不用去寫什么二級域名,二級域名在apache的配置文件里面定義,nginx會直接將那些都傳給它的。

3.修改apache的配置文件

主配置文件/etc/apache2/apache2.conf,在#ServerRoot "/etc/apache"下添加一行指明ServerName,例如:

#ServerRoot "/etc/apache2"
ServerName haofly.net

虛擬目錄配置文件(這就相當于為apache多開了幾個線程,就好像是有多個apache在同時工作一樣) vim /etc/apache2/sites-available/000-default.conf(這是默認的那個80端口的配置文件),只需要把里面的80端口改為8080即可。然后再新建幾個配置文件vim /etc/apache2/sites-available/proxy01.conf內容如下:

<VirtualHost *:8081>
    ServerAdmin localhost:8081
    DocumentRoot /var/www/html
    ErrorLog $\{APACHE_LOG_DIR\}/error.log
    CustomLog $\{APACHE_LOG_DIR\}/access.log combined
</VIrtualHost

8082端口的配置文件proxy02.conf只需要把端口改為8082即可,另外為方便測試,我們需要把8083端口的配置文件特殊化一下,vim /etc/apache2/sites-available/proxy03.conf,內容如下:

<VirtualHost *:8083>
    ServerAdmin localhost:8083
    DocumentRoot /var/www/test
    ErrorLog $\{APACHE_LOG_DIR\}/error.log
    CustomLog $\{APACHE_LOG_DIR\}/access.log combined
</VirtualHost>

其實只是修改了DocumentRoot,使它指向/var/www/test,這樣就方便測試了,/var/www/test下新建一個文件vim/var/www/test/index.html,內容如下

<html>
 hehe
</html>

在把配置文件鏈接到/etc/apache2/sites-available文件夾:

cd ../sites-enabled
sudo ln -s ../sites-available/proxy01.conf
sudo ln -s ../sites-available/proxy02.conf
sudo ln -s ../sites-available/proxy03.conf

最后再修改apache的端口文件vim /etc/apache2/ports.conf,把Listen *80修改為:

Listen 8080
Listen 8081
Listen 8082
Listen 8083

4.測試

首先檢查配置文件是否有語法錯誤

nginx -t
apachectl -t

如果都OK,就可以重啟了:

service apache2 restart
service nginx stop
service nginx start

然后在瀏覽器輸入上面的Servername,即http://haofly.net,多刷新幾次,就會發現,有時候出現的是apache的界面,有時候出現的是test下那個hehe界面。

5.nginx添加二級域名

比apache簡單多了,我這里不僅添加了二級域名,并且也實現了一個反向代理,/etc/nginx/nginx.conf里面的http里面添加一個upstream和一個server即可:

upstream {
   server localhost:8084;
}
server {
    server_name aa.hostname.com;
    listen               80;
    location / {
      proxy_pass http://er;
      proxy_redirect default;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection $http_connection;
    }
}

然后就像Apache簡單配置以及設置二級域名 那樣設置apache即可。

參考文章:

http://blog.csdn.net/yanggd1987/article/details/31375573
http://www.oschina.net/question/56436_109188

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容