############ 認識nginx #############
Nginx:(發音同 engine x)是一款輕量級的Web服務器/反向代理服務器及電子郵件(IMAP/POP3)代理服務器,並在一個BSD-like 協議下發行。由俄羅斯的程序設計師Igor Sysoev所開發,最初供俄國大型的入口網站及搜尋引擎Rambler(俄文:Рамблер)使用。 其優點是輕量級(佔有內存少),高併發(併發能力強),事實上nginx的併發能力確實在同類型的網頁伺服器中表現較好.目前中國大陸使用nginx網站用戶有:新浪、網易、 騰訊,另外知名的微網誌Plurk也使用nginx
######## 搭建基於nginx的web服務器 ############
1.通常情況下nginx只處理靜態的網頁請求,即html.如果是來自動態的網頁請求,如*.php,則nginx就要根據正則表達式查詢路徑,然後把*.PHP交給PHP去處理
2.
1)安裝make、gcc、源碼安裝nginx
yum install -y make gcc
tar zxf nginx-1.10.1.tar.gz ##解壓包
cd nginx-1.10.1 ##進入目錄
/configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module ##安裝配置
yum install -y pcre-devel ##在安裝配置時,安裝缺少的函數庫(缺少什麼安裝什麼)pcre是nginx支持具備URI重寫功能的rewrite模塊
yum install -y openssl-devel ##在使用HTTPS服務時候必須裝openssl-devel
make;make install ##make進行編譯 make install生成文件到系統
ln -s /usr/local/nginx/sbin/nginx /usr/sbin ##建立軟鏈接,方便之後管理
2)
vim auto/cc/gcc
# debug
#CFLAGS="$CFLAGS -g" ##註釋debug功能,可減少編譯佔用資源
vim src/core/nginx.h
#define NGINX_VERSION "1.10.1”
#define NGINX_VER "nginx" ##修改此行,去掉後面的“NGINX_VERSION”,爲了安全,這樣編譯後外界無法獲取程序的版本號
3)檢查錯誤:
[root@localhost nginx-1.10.1]# nginx -t ##檢查nginx配置文件是否有語法錯誤
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
4)開啓nginx並查看nginx服務狀態
nginx ##開啓nginx
netstat -anlpt|grep 80 ##查看狀態
5)瀏覽器訪問:http://172.25.8.1
【注意防火牆:/etc/init.d/iptables stop】
6)
nginx -s reload ##重新加載nginx服務(現在使用的)
kill -s HUP nginx ##重新加載配置文件,相當於“killall -1 nginx”(之前使用的)
kill -s QUIT nginx ##安全退出,相當於“kill -3 nginx”
kill -s TERM nginx ##快速退出,不等待處理完當前連接
############ nginx的多核配置、進程限制 ############
1.多核配置
cd /usr/local/nginx/conf ##進入目錄
useradd -u 900 -d /usr/local/nginx nginx ##-u指定uid,-d指定目錄(如果有就不用建立了)
vim nginx.conf ##編輯文件
user nginx nginx; ##添加該內容,定義nginx的用戶和用戶組
nginx -t ##查看nginx服務是否配置成功
nginx -s reload ##重新加載nginx服務
ps aux| grep nginx ##查看nginx進程個數
關閉server1虛擬機,打開虛擬機管理器,將CPU個數添加爲兩個,點擊processor,cpu添加爲2個,重新打開server1
lscpu ##查看CPU個數
vim nginx.conf ##編輯文件
user nginx;
worker_processes 2; ##將work_processes 後接參數改爲2
worker_cpu_affinity 01 10; ##利用多核cpu配置,01 10表示開啓兩個進程,第一個進程對應第一個CPU內核,第二個進程對應第二個CPU內核
【8核cpu,開啓兩個進程,舉例:: 10101010 01010101; 兩組數表示開啓了2個進程,位數可對應着cpu個數,10101010表示開啓了2,4,6,8內核,01010101表示開啓了1,3,5,7內核】
nginx -t ##查看nginx服務是否配置成功
nginx ##開啓nginx
nginx -s reload ##重新加載nginx服務
【如果出現nginx: [error] open() "/usr/local/lnmp/nginx/logs/nginx.pid" failed (2: No such file or directory) 則說明nginx沒開,使用nginx命令開啓】
ps aux| grep nginx ##查看nginx進程個數
返回內容:
root 2567 0.0 0.1 45220 1776 ? Ss 19:51 0:00 nginx: master process nginx
nginx 5261 0.0 0.1 45636 2004 ? S 20:51 0:00 nginx: worker process
nginx 5262 0.0 0.1 45636 1836 ? S 20:51 0:00 nginx: worker process
2.進程限制
1)
su nginx
ulimit -a ##查看當前用戶進程限制
返回:open files (-n) 1024
max user processes (-u) 1024
2)
su root
vim /etc/security/limits. conf
在最後添加:
nginx - nofile 200 ##該用戶文件限制爲200
nginx - nproc 200 ##該用戶進程限制爲200
3)
su - nginx 切換到該用戶
ulimint -a 來查看
返回內容:
open files (-n) 200
max user processes (-u) 200
4)
cd /usr/local/nginx/conf/
vim nginx.conf ##編輯文件修改參數
events {
use epoll;
worker_connections 1024; ##這裏爲root的總進程數
}
##在server位置編添加下列參數
location /status { ##/status爲狀態文件目錄
stub_status on; ##開啓查看nginx狀態信息
access_log off;
}
5)檢查、重新加載
nginx -t ##查看nginx服務是否配置成功
nginx -s reload ##重新加載nginx服務
6)測試
curl 172.25.8.1/status ##命令行測試查看進程數
返回內容:
Active connections: 1
server accepts handled requests
3 3 4
Reading: 0 Writing: 1 Waiting: 0
ab -n 1000 -c 500 http://172.25.8.1/index.html ##壓力測試,確保已經啓動nginx
(-n表示請求次數,1000個進程 -c表示一次請求併發次數,500個)】
curl 172.25.8.1/status ##再次查看進程數
返回內容:
Active connections: 1 ##表示活躍的連接數
server accepts handled requests
1112 1112 1113 ##總共處理了1112個連接,1112次握手,總共處理了1113個請求
Reading: 0 Writing: 1 Waiting: 0 ##Reading讀取客戶連接數,Writing響應數據到客戶端的數量,Waiting正在等候下一次請求指令的駐留連接
############## nginx加密協議https的訪問 ##############
1)
vim nginx.conf ##打開文件去掉下列參數並修改
server {
listen 443 ssl;
server_name server1.example.com; ##修改爲服務器名
ssl_certificate cert.pem;
ssl_certificate_key cert.pem; ##修改爲cert.pem
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;
}
}
2)
cd /etc/pki/tls/certs/
make cert.pem ##生成這個文件 參數爲下
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:Shaanxi
Locality Name (eg, city) [Default City]:xi'an
Organization Name (eg, company) [Default Company Ltd]:redhat
Organizational Unit Name (eg, section) []:linux
Common Name (eg, your name or your server's hostname) []:server1.example.com
Email Address []:[email protected]
mv cert.pem /usr/local/nginx/conf ##cert.pem放置在/usr/local/nginx/conf下
3)
nginx -t ##查看nginx服務是否配置成功
nginx -s reload ##重新加載nginx服務
4)
瀏覽器訪問https://172.25.8.1(選擇 I Unserstand The Risks,添加認證)
########### nginx配置參數的解釋 ###########
--prefix=path 定義一個目錄,存放服務器上的文件 ,也就是nginx的安裝目錄。默認使用 /usr/local/nginx。
--sbin-path=path 設置nginx的可執行文件的路徑,默認爲 prefix/sbin/nginx.
--conf-path=path 設置在nginx.conf配置文件的路徑。nginx允許使用不同的配置文件啓動,通過命令行中的-c選項。默認爲prefix/conf/nginx.conf.
--pid-path=path 設置nginx.pid文件,將存儲的主進程的進程號。安裝完成後,可以隨時改變的文件名 ,在nginx.conf配置文件中使用 PID指令。默認情況下,文件名 爲prefix/logs/nginx.pid.
--error-log-path=path 設置主錯誤,警告,和診斷文件的名稱。安裝完成後,可以隨時改變的文件名 ,在nginx.conf配置文件中 使用 的error_log指令。默認情況下,文件名 爲prefix/logs/error.log.
--http-log-path=path 設置主請求的HTTP服務器的日誌文件的名稱。安裝完成後,可以隨時改變的文件名 ,在nginx.conf配置文件中 使用 的access_log指令。默認情況下,文件名 爲prefix/logs/access.log.
--user=name 設置nginx工作進程的用戶。安裝完成後,可以隨時更改的名稱在nginx.conf配置文件中 使用的 user指令。默認的用戶名是nobody。
--group=name 設置nginx工作進程的用戶組。安裝完成後,可以隨時更改的名稱在nginx.conf配置文件中 使用的 user指令。默認的爲非特權用戶。
--with-select_module --without-select_module 啓用或禁用構建一個模塊來允許服務器使用select()方法。該模塊將自動建立,如果平臺不支持的kqueue,epoll,rtsig或/dev/poll。
--with-poll_module --without-poll_module 啓用或禁用構建一個模塊來允許服務器使用poll()方法。該模塊將自動建立,如果平臺不支持的kqueue,epoll,rtsig或/dev/poll。
--without-http_gzip_module 不編譯壓縮的HTTP服務器的響應模塊。編譯並運行此模塊需要zlib庫。
--without-http_rewrite_module 不編譯重寫模塊。編譯並運行此模塊需要PCRE庫支持。
--without-http_proxy_module 不編譯http_proxy模塊。
--with-http_ssl_module 使用https協議模塊。默認情況下,該模塊沒有被構建。建立並運行此模塊的OpenSSL庫是必需的。
--with-pcre=path 設置PCRE庫的源碼路徑。PCRE庫的源碼(版本4.4 - 8.30)需要從PCRE網站下載並解壓。其餘的工作是Nginx的./ configure和make來完成。正則表達式使用在location指令和 ngx_http_rewrite_module 模塊中。
--with-pcre-jit 編譯PCRE包含“just-in-time compilation”(1.1.12中, pcre_jit指令)。
--with-zlib=path 設置的zlib庫的源碼路徑。要下載從 zlib(版本1.1.3 - 1.2.5)的並解壓。其餘的工作是Nginx的./ configure和make完成。ngx_http_gzip_module模塊需要使用zlib 。
--with-cc-opt=parameters 設置額外的參數將被添加到CFLAGS變量。例如,當你在FreeBSD上使用PCRE庫時需要使用:--with-cc-opt="-I /usr/local/include。.如需要需要增加 select()支持的文件數量:--with-cc-opt="-D FD_SETSIZE=2048".
--with-ld-opt=parameters 設置附加的參數,將用於在鏈接期間。例如,當在FreeBSD下使用該系統的PCRE庫,應指定:--with-ld-opt="-L /usr/local/lib".