前一篇文章 Windows下安裝與使用Nginx (1) 介紹了在windows環境下Nginx的安裝與使用,因我本人對linux並不熟悉,所以先以window環境試水,花了一天的時間將linux環境下的Nginx建起來,仍舊以博客記錄建置的過程,供後來者參考,也給自己留個筆記.
環境準備
使用工具
- winscp : 在windows環境下直接連linux進行文件傳送,文件夾/文件新增修改刪除,大大方便了在linux上進行文件相關的操作.
- putty : 遠程連接linux,連接後在本機使用命令行遠程操作即可.
Linux基礎環境相關
- gcc & g++
1.判斷是否安裝了gcc&g++
# rpm -qa | grep gcc
若有出現以下三個包,則無需安裝,否則需要執行2的操作安裝這三個包.
2.若沒有可使用putty遠程連接linux服務器之後,使用yum命令在線安裝,用該方式安裝依賴linux服務器需有外網訪問權限.
# yum -y install gcc-c++
-y爲自動選擇y,當有詢問選擇y/n時自動選擇y
- pcre
1.下載地址:https://nchc.dl.sourceforge.net/project/pcre/pcre/8.12/pcre-8.12.tar.gz
2.使用winscp上傳pcre-8.12.tar.gz 到 /usr/local/src/nginx目錄下
3.解壓pcre-8.12.tar.gz
# cd /usr/local/src/nginx
# tar zxvf pcre-8.12.tar.gz
4.進入解壓後的目錄
# cd pcre-8.12
5.配置
# ./configure
6.編譯
# make
7.安裝
# make install
- 修改防火牆配置開放nginx端口
默認狀態下只開放22端口供ssh連接,所以需要開放nginx使用的端口,否則其他主機無法連接.
查看端口開放狀況
# vim + /etc/sysconfig/iptables
若nginx端口沒有開放,修改防火牆配置,事實上,我是複製了22端口的那筆記錄,修改成自己要開放的端口,修改完之後保存退出,然後重啓防火牆.
# service iptables restart
Nginx
1.下載地址: http://nginx.org/en/download.html
2.使用winscp上傳nginx-1.8.1.tar.gz 到 /usr/local/src/nginx目錄下
測試站點
安裝Nginx
參考這位前輩的做法 http://www.cnblogs.com/kevingrace/p/5882006.html
1.添加用戶nginx,用於運行nginx服務進程
# groupadd -r nginx
# useradd -r -g nginx -s /bin/false -M nginx
2.解壓nginx-1.8.1.tar.gz
# cd /usr/local/src/nginx
# tar zxvf nginx-1.8.1.tar.gz
3.進入解壓後的目錄
# cd nginx-1.8.1
4.配置
# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_flv_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre
補充:在這裏我遇到了OpenSSL的異常,提示如下:
解決方式是安裝OpenSSL,指令如下:
yum -y install openssl openssl-devel
5.編譯
# make
6.安裝
# make install
至此,nginx服務算是安裝完成了,切換到nginx的安裝目錄,我們可以看到安裝目錄下有以下文件:
# cd /usr/local/nginx/
# ls
開啓nginx,訪問http://nginx_ip/,出現默認的頁面.
# cd sbin
# ./nginx
配置Nginx負載均衡
配置文檔詳細說明: 參考http://www.linuxidc.com/Linux/2013-11/92594.htm
Nginx配置文件主要分爲4部分:main(全局設置)、server(主機設置)、upstream(負載均衡服務器設置)和location(URL匹配特定位置的設置).
其中,main部分設置將會影響其他所有設置,server部分的指令主要用於指定主機和端口。upstream指令主要用於負載均衡,設置一系列的後端服務器,location部分主要用於匹配網頁位置。四者的關係如下:server繼承main,location繼承server,upstream既不繼承其他設置,也不被設置所繼承。
1、nginx的全局配置
下面這段代碼內容是nginx全局屬性的配置
user nobody; #指定nginx worker進程運行用戶以及用戶組,默認nobody。
worker_processes 1; #指定nginx要開啓的進程數。最好與CPU個數相同。
error_log logs/error.log notice; #用來定義全局錯誤日誌文件。級別有:debug、info、notice、warn、error和crit。debug輸出日誌最爲詳細,criti輸出日誌最少。
pid logs/nginx.pid; #用來指定進程id的存儲文件位置。
events { #設定nginx的工作模式及連接上限。
use epoll; #支持的工作模式有:select、poll、kqueue、epoll和rtsig.對於linux系統,epoll是首選模式。
worker_connections 1024; #定義nginx每個進程的最大連接數。
}
2、HTTP服務器配置
http {
include mime.types; #實現對配置文件所包含的文件的設定,可以減少主配置文件的複雜度
default_type application/octet-stream; #設定默認類型爲二進制流
log_format main '$remote_addr - $remote_user [$time_local] "$request" ' #指定nginx日誌的輸出格式,main爲此日誌文件輸出格式的名稱,可以在下面access_log指令中引用
access_log logs/access.log main;
sendfile on; #用於開啓高效文件傳輸模式
tcp_nopush on; #防止TCP阻塞
keepalive_timeout 0; #用於設置客戶端連接保持活動的超時時間,超過這個時間,服務器會關閉該連接
keepalive_timeout 65; #同上
gzip on; #支持壓縮傳輸,提高傳輸速度
server { #server{}第一個虛擬主機
listen 80; #監聽端口
server_name localhost; #主機頭(域名)
charset utf-8; #web服務器的語言編碼
access_log logs/host.access.log main; #虛擬主機獨立的訪問日誌
location / { #匹配url地址中有"/",則執行花括號中的配置
root html; #虛擬主機的本地目錄,完整路徑/opt/nginx/html也可寫絕對路徑
index index.html index.htm; #默認索引的首頁格式及順序
proxy_pass http://localhost:59637; #請求轉向的地址
}
error_page 500 502 503 504 /50x.html; #定義錯誤頁面
location = /50x.html {
root html;
}
}
}
3、upstream負載均衡配置
這裏說明兩種負載均衡模式:
(1)輪詢加權,也可以不加權,就是1:1輪詢
(2)ip_hash,同一ip會被分配給固定的後端服務器,當session保存在IIS進程中的時候,可使用這種方式.但當某一臺後端服務器掛掉的時候,session則會丟失.
upstream myweb {
#ip_hash #使用ip hash分配模式
server 192.168.18.117:111 weight=1; #站點A
server 192.168.18.117:222 weight=2; #站點B
}
基於我的需求,需要達到真正的負載平衡,也就是當某一臺掛掉時,原來連接到掛點服務器的使用者仍可以正常使用,所以我採用輪詢的負載均衡模式,並且我需要將session獨立存儲(asp.net使用redis存儲session),我的配置修改爲:
upstream myweb {
server 192.168.18.117:111 weight=1; #站點A
server 192.168.18.117:222 weight=1; #站點B
}
location / {
root html;
index index.html index.htm;
proxy_pass http://myweb; #指向upstream配置
}
最後附加nginx常用指令
# cd /usr/local/nginx/sbin 切換到nginx目錄
# ./nginx -s stop 強制關閉
# ./nginx -s quit 安全關閉
# ./nginx -t 檢查配置文件是否正確
# ./nginx -s reload 改變配置文件後重新加載配置,不需要重啓nginx
# ./nginx -s reopen 打開日誌文件
或者
# /usr/local/nginx/sbin/nginx -s stop 強制關閉
# /usr/local/nginx/sbin/nginx -s quit 安全關閉
# /usr/local/nginx/sbin/nginx -t 檢查配置文件是否正確
# /usr/local/nginx/sbin/nginx -s reload 改變配置文件後重新加載配置,不需要重啓nginx
# /usr/local/nginx/sbin/nginx -s reopen 打開日誌文件
測試
至此,我的nginx負載平衡可以正常工作啦,當我第一次訪問時,實際上訪問的是站點A,第二次訪問時,實際上訪問的是站點B.
寫在最後
這篇文章是最簡單的負載均衡的配置過程,後續將加入session存儲到redis,nginx緩存設置,與keepalive結合等主題,實現真正的web服務高可用.