Linux/Centos下安裝與使用Nginx(1)

前一篇文章 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服務高可用.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章