linux學習筆記——搭建基於nginx的web服務器、多核配置、nginx配置參數

############ 認識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".

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