Nginx基礎篇(1)- Nginx的快速搭建和基本參數

Nginx的快速搭建和基本參數

1、Nginx簡介

1. Nginx簡述

Nginx是一個開源且高性能、可靠的HTTP中間件、代理服務。html

2. 常見的HTTP服務

  • httpd - Apache
  • IIS - 微軟
  • GWE - Google
  • tomcat - Sun

2、爲何選擇Nginx

1. IO多路複用epoll

什麼是IO多路複用

多個描述符的I/O操做都能在一個線程內併發交替地順序完成,這就叫I/O多路複用,這裏的「複用」指的是複用同一個線程。linux

什麼是epoll

IO多路服用的實現方式:select、poll、epoll
select

基本原理:
select 函數監視的文件描述符分3類,分別是writefds、readfds、和exceptfds。調用後select函數會阻塞,直到有描述符就緒(有數據 可讀、可寫、或者有except),或者超時(timeout指定等待時間,若是當即返回設爲null便可),函數返回。當select函數返回後,能夠經過遍歷fdset,來找到就緒的描述符。nginx

select缺點:
1.可以監視文件描述符的數量存在最大限制。
2.線性掃描效率低下。web

epoll

基本原理:
epoll支持水平觸發和邊緣觸發,最大的特色在於邊緣觸發,它只告訴進程哪些fd剛剛變爲就緒態,而且只會通知一次。還有一個特色是,epoll使用「事件」的就緒通知方式,經過epoll_ctl註冊fd,一旦該fd就緒,內核就會採用相似callback的回調機制來激活該fd,epoll_wait即可以收到通知。shell

epoll的優勢:
1.沒有最大併發鏈接的限制,能打開的FD的上限遠大於1024(1G的內存上能監聽約10萬個端口)。
2.效率提高,不是輪詢的方式,不會隨着FD數目的增長效率降低。
3.內存拷貝,利用mmap()文件映射內存加速與內核空間的消息傳遞;即epoll使用mmap減小複製開銷。centos

2. 輕量級

功能模塊少

代碼模塊化

3. CPU親和性(affinity)好

CPU親和性(affinity)是一種把CPU核心和Nginx工做進程綁定方式,把每一個worker進程固定在一個CPU上執行,減小CPU的cache miss,得到更好的性能。緩存

4. sendfile

sendfile可讓Nginx在傳輸文件時直接在磁盤和tcp socket之間傳輸數據。若是這個參數不開啓,會先在用戶空間(Nginx進程空間)申請一個buffer,用read函數把數據從磁盤讀到cache,再從cache讀取到用戶空間的buffer,再用write函數把數據從用戶空間的buffer寫入到內核的buffer,最後到tcp socket。tomcat

通常web server傳輸數據方式

sendfile

3、Nginx的快速搭建和基本參數(CentOS7)

1. yum方式安裝【參考

建立/etc/yum.repos.d/nginx.repo文件,並輸入以下內容

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/mainline/OS/OSRELEASE/$basearch/
gpgcheck=0
enabled=1
OS 可選值有 centosrhel
OSRELEASE 爲系統版本,例如 67 分別表明 6.x 和 7.x 的版本。

運行 yum install -y nginx 安裝nginx

運行 nginx -v 查看nginx版本

[root~]# nginx -v
nginx version: nginx/1.14.0

2. 編譯參數詳解

查看nginx安裝時的編譯參數

nginx -V
[root~]# nginx -V
nginx version: nginx/1.14.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-16) (GCC)
built with OpenSSL 1.0.2k-fips  26 Jan 2017
TLS SNI support enabled

configure arguments: 
--prefix=/etc/nginx 
--sbin-path=/usr/sbin/nginx 
--modules-path=/usr/lib64/nginx/modules 
--conf-path=/etc/nginx/nginx.conf 
--error-log-path=/var/log/nginx/error.log 
--http-log-path=/var/log/nginx/access.log 
--pid-path=/var/run/nginx.pid 
--lock-path=/var/run/nginx.lock 
--http-client-body-temp-path=/var/cache/nginx/client_temp 
--http-proxy-temp-path=/var/cache/nginx/proxy_temp 
--http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp 
--http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp 
--http-scgi-temp-path=/var/cache/nginx/scgi_temp 
--user=nginx 
--group=nginx 
--with-compat 
--with-file-aio 
--with-threads 
--with-http_addition_module 
--with-http_auth_request_module 
--with-http_dav_module 
--with-http_flv_module 
--with-http_gunzip_module 
--with-http_gzip_static_module 
--with-http_mp4_module 
--with-http_random_index_module 
--with-http_realip_module 
--with-http_secure_link_module 
--with-http_slice_module 
--with-http_ssl_module 
--with-http_stub_status_module 
--with-http_sub_module 
--with-http_v2_module 
--with-mail 
--with-mail_ssl_module 
--with-stream 
--with-stream_realip_module 
--with-stream_ssl_module 
--with-stream_ssl_preread_module 
--with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC' 
--with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie'

安裝編譯參數詳解【參考

編譯選項 做用
--prefix=/etc/nginx 配置文件目錄
--sbin-path=/usr/sbin/nginx 可執行文件名稱和所在目錄
--modules-path=/usr/lib64/nginx/modules nginx動態模塊的安裝目錄
--conf-path=/etc/nginx/nginx.conf 主配置文件名稱和所在目錄
--error-log-path=/var/log/nginx/error.log 全局錯誤日誌文件名稱和所在目錄
--http-log-path=/var/log/nginx/access.log HTTP服務器的主請求日誌文件的名稱和所在目錄
--pid-path=/var/run/nginx.pid nginx.pid所在目錄,這是儲存主進程的進程ID文件
--lock-path=/var/run/nginx.lock nginx.lock所在目錄
--http-client-body-temp-path=/var/cache/nginx/client_temp
--http-proxy-temp-path=/var/cache/nginx/proxy_temp
--http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp
--http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp
--http-scgi-temp-path=/var/cache/nginx/scgi_temp
執行對應模塊時nginx所保留的臨時文件
--user=nginx
--group=nginx
設定Nginx進程啓動的用戶和用戶組
--with-http_random_index_module 目錄中隨機選擇一個隨機主頁
--with-http_stub_status_module Nginx客戶端狀態
--with-http_sub_module HTTP內容替換
--with-cc-opt=<parameters> 設置額外的參數將被添加到CFLAGS變量
--with-ld-opt=<parameters> 設置附加參數,連接系統庫

3. 安裝目錄詳解

查看nginx全部文件的安裝位置

rpm -ql nginx
[root~]# rpm -ql nginx
/etc/logrotate.d/nginx
/etc/nginx
/etc/nginx/nginx.conf
/etc/nginx/conf.d
/etc/nginx/conf.d/default.conf
/etc/nginx/fastcgi_params
/etc/nginx/scgi_params
/etc/nginx/uwsgi_params
/etc/nginx/koi-utf
/etc/nginx/koi-win
/etc/nginx/win-utf
/etc/nginx/mime.types
/etc/sysconfig/nginx
/etc/sysconfig/nginx-debug
/usr/lib/systemd/system/nginx-debug.service
/usr/lib/systemd/system/nginx.service
/usr/lib64/nginx
/usr/lib64/nginx/modules
/etc/nginx/modules
/usr/sbin/nginx
/usr/sbin/nginx-debug
/usr/share/doc/nginx-1.14.0
/usr/share/doc/nginx-1.14.0/COPYRIGHT
/usr/share/man/man8/nginx.8.gz
/usr/share/nginx
/usr/share/nginx/html
/usr/share/nginx/html/50x.html
/usr/share/nginx/html/index.html
/var/cache/nginx
/var/log/nginx
/usr/libexec/initscripts/legacy-actions/nginx
/usr/libexec/initscripts/legacy-actions/nginx/check-reload
/usr/libexec/initscripts/legacy-actions/nginx/upgrade
默認路徑 類型 做用
/etc/logrotate.d/nginx 配置文件 Nginx日誌輪轉,用於logrotate服務的日誌切割
/etc/nginx
/etc/nginx/nginx.conf
/etc/nginx/conf.d
/etc/nginx/conf.d/default.conf
目錄、配置文件 nginx主配置文件
/etc/nginx/fastcgi_params
/etc/nginx/uwsig_params
/etc/nginx/scgi_params
配置文件 cgi配置相關,fastcgi配置
/etc/nginx/koi-utf
/etc/nginx/koi-win
/etc/nginx/win-utf
配置文件 編碼轉換映射轉化文件
/etc/nginx/mime.types 配置文件 設置http協議的Content-Type與擴展名對應關係
/usr/lib/systemd/system/nginx-debug.service
/usr/lib/systemd/system/nginx.service
/etc/sysconfig/nginx
/etc/sysconfig/nginx-debug
配置文件 用於配置出系統守護進程管理器管理方式
/usr/lib64/nginx/modules
/etc/nginx/mudules
目錄 Nginx模塊目錄
/usr/sbin/nginx
/usr/sbin/nginx-debug
命令 Nginx服務的啓動管理的終端命令
/usr/share/doc/nginx-1.14.0
/usr/share/doc/nginx-1.14.0/COPYRIGHT
/usr/share/man/man8/nginx.8.gz
文件、目錄 Nginx手冊和幫助文件
/var/cache/nginx 目錄 Nginx緩存目錄
/var/log/nginx 目錄 Nginx日誌目錄

4、Nginx經常使用命令

命令 解釋
nginx [-c <配置文件>] 以指定的配置文件啓動nginx
nginx -s quit 正常中止nginx,Nginx在退出前完成已經接受的鏈接請求。
nginx -s stop 快速中止nginx,無論有沒有正在處理的請求。
nginx -s reload [-c <配置文件>] 重載配置文件
nginx -s reopen 從新打開日誌文件
nginx -v 查看版本
nginx -V 查看安裝時的編譯參數
nginx -t [-c <配置文件>] 檢查配置文件語法是否正確

nginx -s reload 命令加載修改後的配置文件,命令下達後發生以下事件

  1. Nginx的master進程檢查配置文件的正確性,如果錯誤則返回錯誤信息,nginx繼續採用原配置文件進行工做(由於worker未受到影響)
  2. Nginx啓動新的worker進程,採用新的配置文件
  3. Nginx將新的請求分配新的worker進程
  4. Nginx等待之前的worker進程的所有請求都返回後,關閉相關worker進程
  5. 重複上面過程,直到所有舊的worker進程都被關閉掉
相關文章
相關標籤/搜索