1. 程式人生 > >nginx服務器及優化

nginx服務器及優化

p地址 超時時間 dex cat 主程序 其中 tar.gz weight 重啟nginx

nginx服務器
作用:是一個高性能的HTTP和反向代理服務器,同時也是一個
IMAP/POP3/SMTP代理服務器。

Nginx配置文件及目錄:
/usr/local/nginx 安裝目錄
-conf/nginx.conf 主配置文件
-html 網頁目錄
-logs 日誌文件
-sbin/nginx 啟動腳本

/usr/local/nginx/sbin/nginx –v 查看Nginx版本

/usr/local/nginx/sbin/nginx –V 查看編譯參數

/usr/local/nginx/sbin/nginx –t 測試默認配置文件

/usr/local/nginx/sbin/nginx –c conf/nginx.conf 指定配置文件

查看服務相關進程及端口信息
ps aux |grep nginx

netstat -lnatpu |grep nginx

步驟一:構建Nginx服務器
1)使用源碼包安裝nginx軟件包
yum –y install gcc pcre-devel(支持正則) openssl-devel (支持加密網站) //安裝常見依賴包
useradd –s /sbin/nologin nginx 創建nginx用戶
tar -xf nginx-1.8.0.tar.gz
cd nginx-1.8.0
./configure \
--prefix=/usr/local/nginx \ //指定安裝路徑

--user=nginx \ //指定用戶
--group=nginx \ //指定組
--with-http_ssl_module //開啟SSL加密功能
make && make install //編譯並安裝

2)nginx命令的用法
/usr/local/nginx/sbin/nginx //啟動服務
/usr/local/nginx/sbin/nginx -s stop //關閉服務
/usr/local/nginx/sbin/nginx -s reload //重新加載配置文件

/usr/local/nginx/sbin/nginx –V //查看軟件信息

nginx服務默認通過TCP 80端口監聽客戶端請求:
netstat -anptu | grep nginx

3)為Nginx Web服務器建立測試首頁文件
Nginx Web服務默認首頁文檔存儲目錄為/usr/local/nginx/html/,在此目錄下建立一個名為index.html的文件:
touch /usr/local/nginx/html/index.html

步驟二:升級Nginx服務器
1)編譯新版本nginx軟件
tar -zxvf nginx-1.9.0.tar.gz
cd nginx-1.9.0
./configure \
--prefix=/usr/local/nginx \ //指定安裝路徑
--user=nginx \ //指定用戶
--group=nginx \ //指定組
--with-http_ssl_module //開啟SSL加密功能
make

2) 備份老的nginx主程序,並使用編譯好的新版本nginx替換老版本
mv /usr/local/nginx/sbin/nginx >/usr/local/nginx/sbin/nginxold
cp objs/nginx /usr/local/nginx/sbin/ //拷貝新版本
make upgrade //升級
/usr/local/nginx/sbin/nginx –v //查看版本

步驟三:客戶端訪問測試
1)分別使用瀏覽器和命令行工具curl測試服務器頁面
firefox http://192.168.4.5
curl http://192.168.4.5

用戶認證
訪問Web頁面需要進行用戶認證
用戶名為:tom,密碼為:123456
通過Nginx實現Web頁面的認證,需要修改Nginx配置文件,在配置文件中添加auth語句實現用戶認證。最後使用htpasswd命令創建用戶及密碼即可。
步驟一:修改Nginx配置文件
1)修改/usr/local/nginx/conf/nginx.conf
vim /usr/local/nginx/conf/nginx.conf
.. ..
server {
listen 80;
server_name localhost;
auth_basic "Input Password:"; 認證提示符
auth_basic_user_file "/usr/local/nginx/pass"; 認證密碼文件
location / {
root html;
index index.html index.htm;
}
}

2)生成密碼文件,創建用戶及密碼
使用htpasswd命令創建賬戶文件,需要確保系統中已經安裝了httpd-tools。
yum -y install httpd-tools
htpasswd -cm /usr/local/nginx/pass tom 創建密碼文件
New password: 123456
Re-type new password: 123456
htpasswd -m /usr/local/nginx/pass jerry 追加用戶,不使用-c選項

3)重啟Nginx服務
usr/local/nginx/sbin/nginx –s reload
請先確保nginx是啟動狀態才可以執行命令成功,否則報錯

步驟二:客戶端測試
1)登錄192.168.4.100客戶端主機進行測試
firefox http://192.168.4.5 //輸入密碼後可以訪問

基於域名的虛擬主機

實現兩個基於域名的虛擬主機,域名分別為www.aa.com和www.bb.com
對域名為www.aa.com的站點進行用戶認證,用戶名稱為tom,密碼為123456
修改Nginx配置文件,添加server容器實現虛擬主機功能;對於需要進行用戶認證的虛擬主機添加auth認證語句。
步驟一:修改配置文件
1)修改Nginx服務配置,添加相關虛擬主機配置如下
vim /usr/local/nginx/conf/nginx.conf
.. ..
server { 定義虛擬主機
listen 80; 端口
server_name www.aa.com; 域名
auth_basic "Input Password:"; 認證提示符
auth_basic_user_file "/usr/local/nginx/pass"; 認證密碼文件
location / { 發布目錄
root html; 指定網站根路徑
index index.html index.htm;
}

}
… …
server {
listen 80;
server_name www.bb.com;
location / {
root www;
index index.html index.htm;
}
}

2)創建賬戶及密碼
htpasswd –cm /usr/local/nginx/pass tom 創建賬戶密碼文件

3)創建網站根目錄及對應首頁文件
mkdir /usr/local/nginx/www
echo "www" > /usr/local/nginx/www/index.html

4)重啟nginx服務
/usr/local/nginx/sbin/nginx –s reload

步驟二:客戶端測試
1)修改客戶端主機192.168.4.100的/etc/hosts文件,進行域名解析
vim /etc/hosts
192.168.4.5 www.aa.com www.bb.com

2)登錄192.168.4.100客戶端主機進行測試
firefox http://www.aa.com 輸入密碼後可以訪問
firefox http://www.bb.com 直接訪問

SSL虛擬主機
域名為www.cc.com
該站點通過https訪問
通過私鑰、證書對該站點所有數據加密
源碼安裝Nginx時必須使用--with-http_ssl_module參數,啟用加密模塊,對於需要進行SSL加密處理的站點添加ssl相關指令(設置網站需要的私鑰和證書)。

步驟一:配置SSL虛擬主機
1)生成私鑰與證書
cd /usr/local/nginx/conf
openssl genrsa > cert.key 生成私鑰
openssl req -new -x509 -key cert.key > cert.pem 生成證書

2)修改Nginx配置文件,設置加密網站的虛擬主機
vim /usr/local/nginx/conf/nginx.conf
… …
server { 定義虛擬主機
listen 443 ssl; 開啟SSL
server_name www.cc.com;
ssl_certificate cert.pem; 指定證書文件
ssl_certificate_key cert.key; 指定私鑰文件
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
root html;
index index.html index.htm;
}
}

步驟二:客戶端驗證
1)修改客戶端主機192.168.4.100的/etc/hosts文件,進行域名解析
vim /etc/hosts
192.168.4.5 www.cc.com www.aa.com www.bb.com

2)登錄192.168.4.100客戶端主機進行測試
firefox https://www.cc.com //信任證書後可以訪問

Nginx反向代理
輪詢(默認):逐一循環調度
Weight:指定循環幾率,權重值和訪問比率成正比
ip_hash:根據客戶端ip分配固定的後端服務器
down:表示當前server暫停不參與負載
max_fails:允許請求失敗的次數(默認為1)
fail_timeout:max_fails次失敗後,暫停提供服務的時間
backup:備份服務器

後端做2臺web服務器
Nginx采用輪詢的方式調用後端Web服務器
兩臺Web服務器的權重要求設置為不同的值
最大失敗次數為1,失敗超時時間為30秒

例:使用4臺RHEL7虛擬機,其中一臺作為Nginx代理服務器,該服務器需要配置兩塊網卡,IP地址分別為192.168.4.5和192.168.2.5,兩臺Web服務器IP地址分別為192.168.2.100和192.168.2.200。客戶端測試主機IP地址為192.168.4.100

步驟一:部署實施後端Web服務器
1)部署後端Web1服務器
後端Web服務器可以簡單使用yum方式安裝httpd實現Web服務,為了可以看出後端服務器的不同,可以將兩臺後端服務器的首頁文檔內容設置為不同的內容。
yum -y install httpd
echo "192.168.2.100" > /var/www/html/index.html
systemctl restart httpd

2)部署後端Web2服務器
yum -y install httpd
echo "192.168.2.200" > /var/www/html/index.html
systemctl restart httpd

步驟二:配置Nginx服務器,添加服務器池,實現反向代理功能
1)修改/usr/local/nginx/conf/nginx.conf配置文件
vim /usr/local/nginx/conf/nginx.conf
.. ..
http {
.. ..
upstream webserver { 定義員服務器組
server 192.168.2.100 weight=1 max_fails=2 fail_timeout=10;
server 192.168.2.200 weight=2 max_fails=2 fail_timeout=10;
}
.. ..
server {
listen 80;
server_name www.tarena.com;
location / {
proxy_pass http://webserver; 調用服務組
}
}

2)重啟nginx服務
/usr/local/nginx/sbin/nginx –s reload

3)使用瀏覽器訪問代理服務器測試輪詢效果
curl http://192.168.4.5 //使用該命令多次訪問查看效果

步驟二:配置upstream服務器集群池屬性
1)設置失敗次數,超時時間,權重
vim /usr/local/nginx/conf/nginx.conf
.. ..
http {
.. ..
upstream webserver {
server 192.168.2.100 weight=1 max_fails=2 fail_timeout=10;
server 192.168.2.200 weight=2 max_fails=2 fail_timeout=10;
}
.. ..
server {
listen 80;
server_name www.tarena.com;
location / {
proxy_pass http://webserver;
}
}

2)重啟nginx服務
/usr/local/nginx/sbin/nginx –s reload

3)使用瀏覽器訪問代理服務器測試輪詢效果
curl http://192.168.4.5 //使用該命令多次訪問查看效果

4)設置相同客戶端訪問相同Web服務器
vim /usr/local/nginx/conf/nginx.conf
.. ..
http {
.. ..
upstream webserver {
ip_hash;
server 192.168.2.100 weight=1 max_fails=2 fail_timeout=10;
server 192.168.2.200 weight=2 max_fails=2 fail_timeout=10;
}
.. ..
server {
listen 80;
server_name www.tarena.com;
location / {
proxy_pass http://webserver;
}
}

5)重啟nginx服務
/usr/local/nginx/sbin/nginx –s reload

6)使用瀏覽器訪問代理服務器測試輪詢效果
curl http://192.168.4.5 使用該命令多次訪問查看效果

Nginx優化主要從配置文件著手,常見優化參數如下:

worker_processes 與CPU核心數量一致
error_log 定義日誌級別
worker_connections 每個worker最大並發連接數
server_tokens 服務器版本號信息
client_header_buffer_size 默認請求包頭信息的緩存
large_client_header_buffers 大請求包頭部信息的緩存個數與容量
error_page 404 自定義404錯誤頁面

步驟一:構建Nginx服務器
1)源碼安裝Nginx軟件
yum -y install gcc pcre-devel openssl-devel
useradd -s /sbin/nologin nginx
tar -zxvf nginx-1.8.0.tar.gz
cd nginx-1.8.0
./configure \
--prefix=/usr/local/nginx \ 指定安裝路徑
--user=nginx \ 指定用戶
--group=nginx \ 指定組
--with-http_ssl_module 開啟SSL加密功能
[root@svr5 nginx-1.8.0]# make && make install 編譯並安裝

2)啟用Nginx服務並查看監聽端口狀態
/usr/local/nginx/sbin/nginx
netstat -anptu | grep nginx
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 10441/nginx

步驟二:優化前從客戶機訪問Nginx服務器測試
1)使用ab高並發測試
格式:ab -c並發數 -n總請求數 URL
ab –n 2000 –c 2000 http://192.168.4.5/
Benchmarking 192.168.4.5 (be patient)
socket: Too many open files (24) 提示打開文件數量過多

2)使用腳本測試長頭部請求是否能獲得響應
cat buffer.sh
chmod +x buffer.sh
./ buffer.sh
.. ..
<center><h1>414 Request-URI Too Large</h1></center> 提示頭部信息過大

3)客戶端使用瀏覽器訪問不存在的頁面
firefox http://192.168.4.5/tt.html //訪問不存在的頁面

步驟三:優化Nginx服務器
1)修改Nginx配置文件
vim /usr/local/nginx/conf/nginx.conf
.. ..
worker_processes 2; 與CPU核心數量一致
events {
worker_connections 65535; 每個worker最大並發連接數
use epoll;
}
http {
open_file_cache max=2000 inactive=20s; 設置服務器最大緩存2000個文件句柄,關閉20秒內無請求
open_file_cache_valid 60s; 文件句柄有效時間是60秒,60秒後過期
open_file_cache_min_uses 5; 訪問次數超過5次才被緩存
sendfile on; 提升Nginx讀文件性能
tcp_nodelay on; 關閉TCP緩存延遲發送數據
keepalive_timeout 10; 保持連接的超時時間
server_tokens off; 不顯示nginx版本號信息
client_header_buffer_size 1k; 默認請求包頭信息的緩存
large_client_header_buffers 4 4k; 大請求包頭部信息的緩存個數與容量
gzip on; 解壓
gzip_min_length 1000; 1000字節以上解壓
gzip_comp_level 4;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
server {
listen 80;
server_name www.tarena.com;
location / {
root html;
index index.html index.htm;
}
location ~ .(jpg|jpeg|gif|png|css|js|ico|xml)$ { ~匹配正則 不區分大小寫
expires 30d; 定義客戶端緩存時間為30天
}
error_page 404 /40x.html; 自定義錯誤頁面
location = /40x.html {
root html;
}
}
}

2)修改Linux操作系統最大打開文件數
通過修改/etc/security/limits.conf文件修改打開文件最大數量:
vim /etc/security/limits.conf

  • soft nofile 100000
  • hard nofile 100000
    ulimit –Hn 100000
    ulimit –Sn 100000

3)提前生成404錯誤頁面,供測試使用:
vim /usr/local/nginx/html/40x.html
<h1>~~^^^Error^^^~</h1>

nginx服務器及優化