Nginx是一個開源且高性能、可靠的Http Web服務、代理服務。
開源: 直接獲取源代碼
高性能: 支持海量併發
可靠: 服務穩定
咱們爲何選擇 Nginx服務
Nginx很是輕量
功能模塊少 (源代碼僅保留http與核心模塊代碼,其他不夠核心代碼會做爲插件來安裝)
代碼模塊化 (易讀,便於二次開發,對於開發人員很是友好)
互聯網公司都選擇Nginx
1.Nginx技術成熟,具有的功能是企業最常使用並且最須要的
2.適合當前主流架構趨勢, 微服務、雲架構、中間層
3.統一技術棧, 下降維護成本, 下降技術更新成本。
Nginx採用Epool網絡模型,Apache採用Select模型
Select: 當用戶發起一次請求,select模型就會進行一次遍歷掃描,從而致使性能低下。
Epool: 當用戶發起請求,epool模型會直接進行處理,效率高效,並沒有鏈接限制。
Nginx 典型應用場景
html
Nginx軟件安裝的方式有不少種
1.源碼編譯=>Nginx (1.版本隨意 2.安裝複雜 3.升級繁瑣)
2.epel倉庫=>Nginx (1.版本較低 2.安裝簡單 3.配置不易讀)
3.官方倉庫=>Nginx (1.版本較新 2.安裝簡單 3.配置易讀,推薦)html5
1.安裝Nginx軟件所需依賴包nginx
[root@web ~]# yum install -y gcc gcc-c++ autoconf pcre pcre-devel make automake wget httpd-tools vim tree
2.配置nginx官方yum源c++
[root@web ~]# vim /etc/yum.repos.d/nginx.repo [nginx] name=nginx repo baseurl=http://nginx.org/packages/centos/7/$basearch/ gpgcheck=0 enabled=1
3.安裝Nginx服務,啓動並加入開機自啓web
[root@web ~]# yum install nginx -y [root@web ~]# systemctl enable nginx [root@web ~]# systemctl start nginx
4.經過瀏覽器訪問該服務器ip或url地址 10.0.0.7
json
5.檢查Nginx軟件版本以及編譯參數vim
[root@web ~]# nginx -v nginx version: nginx/1.14.0 [root@web ~]# nginx -V
6.爲了讓你們更清晰的瞭解Nginx軟件的全貌,可以使用rpm -ql nginx查看總體的目錄結構及對應的功能,以下表格整理了Nginx比較重要的配置文件
1.Nginx主配置文件centos
路徑 | 類型 | 做用 |
---|---|---|
/etc/nginx/nginx.conf | 配置文件 | nginx主配置文件 |
/etc/nginx/conf.d/default.conf | 配置文件 | 默認網站配置文件 |
2.Nginx代理相關參數文件瀏覽器
路徑 | 類型 | 做用 |
---|---|---|
/etc/nginx/fastcgi_params | 配置文件 | Fastcgi代理配置文件 |
/etc/nginx/scgi_params | 配置文件 | scgi代理配置文件 |
/etc/nginx/uwsgi_params | 配置文件 | uwsgi代理配置文件 |
3.Nginx編碼相關配置文件服務器
路徑 | 類型 | 做用 |
---|---|---|
/etc/nginx/win-utf | 配置文件 | Nginx編碼轉換映射文件 |
/etc/nginx/koi-utf | 配置文件 | Nginx編碼轉換映射文件 |
/etc/nginx/koi-win | 配置文件 | Nginx編碼轉換映射文件 |
/etc/nginx/mime.types | 配置文件 | Content-Type與擴展名 |
4.Nginx管理相關命令
路徑 | 類型 | 做用 |
---|---|---|
/usr/sbin/nginx | 命令 | Nginx命令行管理終端工具 |
/usr/sbin/nginx-debug | 命令 | Nginx命令行與終端調試工具 |
5.Nginx日誌相關目錄與文件
路徑 | 類型 | 做用 |
---|---|---|
/var/log/nginx | 目錄 | Nginx默認存放日誌目錄 |
/etc/logrotate.d/nginx | 配置文件 | Nginx默認的日誌切割 |
獲取官網tar包並解壓 [root@web01 ~]# wget http://nginx.org/download/nginx-1.14.2.tar.gz [root@web01 ~]# tar xf nginx-1.14.2.tar.gz 進入nginx-1.14.2/目錄,編譯 [root@web01 ~]# cd nginx-1.14.2/ [root@web01 nginx-1.14.2]# ./configure --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' [root@web01 nginx-1.14.2]# make && make install
Nginx主配置文件/etc/nginx/nginx.conf是一個純文本類型的文件,整個配置文件是以區塊的形式組織的。通常,每一個區塊以一對大括號{}來表示開始與結束。
Nginx主配置文件總體分爲三塊進行學習,分別是CoreModule(核心模塊),EventModule(事件驅動模塊),HttpCoreModule(http內核模塊)
CoreModule核心模塊
user www; #Nginx進程所使用的用戶 worker_processes 1; #Nginx運行的work進程數量(建議與CPU數量一致或auto) error_log /log/nginx/error.log #Nginx錯誤日誌存放路徑 pid /var/run/nginx.pid #Nginx服務運行後產生的pid進程號
events事件模塊
events { worker_connections 25535; #每一個worker進程支持的最大鏈接數 use epoll; #事件驅動模型, epoll默認 }
http內核模塊
http { #http層開始 ... #使用Server配置網站, 每一個Server{}表明一個網站(簡稱虛擬主機) server { listen 80; #監聽端口, 默認80 server_name bgx.com; #提供的域名 access_log access.log; #該網站的訪問日誌 #控制網站訪問路徑 location / { root /usr/share/nginx/html; #存放網站源代碼的位置 index index.html index.htm; #默認返回網站的文件 } } ... #第二個虛擬主機配置 'server' { ... } include /etc/nginx/conf.d/*.conf; #包含/etc/nginx/conf.d/目錄下全部以.conf結尾的文件 } #http層結束
http server location擴展瞭解項
http{}層下容許有多個Server{}層,一個Server{}層下又容許有多個Location http{} 標籤主要用來解決用戶的請求與響應。 server{} 標籤主要用來響應具體的某一個網站。 location{} 標籤主要用於匹配網站具體URL路徑。
[root@web01 conf.d]# cat /etc/nginx/conf.d/game.conf server { listen 80; server_name game.oldboy.com; location / { root /code; index index.html; } }
[root@web01 conf.d]# mkdir /code && cd /code [root@web01 code]# rz html5.zip [root@web01 code]# unzip html5.zip [root@web01 code]# ls ceshi game html5.zip img index.html readme.txt
[root@web01 code]# nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@web01 code]# systemctl reload nginx
一般在企業中可能會有不少業務系統,那麼多套業務服務如何使用Nginx配置?
若是使用如上方式部署,則須要多臺服務器配置Nginx,但若是使用虛擬主機方式,則在同一個Nginx上運行多套單獨服務,這些服務是相互獨立的。簡單來講,看似多套業務系統,實則能夠運行在一臺Nginx服務上
Nginx配置虛擬主機有以下三種方式:
方式1、基於主機多IP方式 方式2、基於端口的配置方式 方式3、基於多個hosts名稱方式(多域名方式)
那麼基於多IP的方式,有以下兩種方式:
1.配置多網卡多IP的方式
server { ... listen 10.0.0.10:80; ... } server { ... listen 10.0.0.11:80; ... }
2.配置單網卡多IP的方式
#添加一個IP [root@web01 ~]# ip addr add 10.0.0.11/24 dev eth0 # 虛擬機配置方案 [root@web01 ~]# cat /etc/nginx/conf.d/addr1.conf server { ... listen 10.0.0.10:80; ... } [root@web01 ~]# cat /etc/nginx/conf.d/addr2.conf server { ... listen 10.0.0.11:80; ... }
Nginx多端口虛擬主機方式,具體配置以下
#僅修改listen監聽端口便可, 但不能和系統端口出現衝突 [root@web01 ~]# cat /etc/nginx/conf.d/port1.conf server { ... listen 80; ... } [root@web01 ~]# cat /etc/nginx/conf.d/port2.conf server { ... listen 81; ... } [root@web01 ~]# cat /etc/nginx/conf.d/port3.conf server { ... listen 82; ... }
1.建立對應的web站點目錄以及程序代碼
[root@web01 ~]# mkdir /soft/code/{server1,server2} [root@web01 ~]# echo "server1" > /code/server1/index.html [root@web01 ~]# echo "server2" > /code/server2/index.html
2.配置不一樣域名的虛擬主機
[root@web02 ~]# cat /etc/nginx/conf.d/server1.conf server { listen 80; server_name 1.xuliangwei.com; root /code/server1; index index.html; ... } [root@web01 ~]# cat /etc/nginx/conf.d/server2.conf server { ... listen 80; server_name 2.xuliangwei.com; root /code/server2; index index.html; }
Nginx有很是靈活的日誌記錄模式,每一個級別的配置能夠有各自獨立的訪問日誌。日誌格式經過log_format命令定義格式。
# 配置語法: 包括: error.log access.log Syntax: log_format name [escape=default|json] string ...; Default: log_format combined "..."; Context: http
log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"';
$remote_addr # 記錄客戶端IP地址 $remote_user # 記錄客戶端用戶名 $time_local # 記錄通用的本地時間 $time_iso8601 # 記錄ISO8601標準格式下的本地時間 $request # 記錄請求的方法以及請求的http協議 $status # 記錄請求狀態碼(用於定位錯誤信息) $body_bytes_sent # 發送給客戶端的資源字節數,不包括響應頭的大小 $bytes_sent # 發送給客戶端的總字節數 $msec # 日誌寫入時間。單位爲秒,精度是毫秒。 $http_referer # 記錄從哪一個頁面連接訪問過來的 $http_user_agent # 記錄客戶端瀏覽器相關信息 $http_x_forwarded_for #記錄客戶端IP地址 $request_length # 請求的長度(包括請求行, 請求頭和請求正文)。 $request_time # 請求花費的時間,單位爲秒,精度毫秒 # 注:若是Nginx位於負載均衡器,nginx反向代理以後, web服務器沒法直接獲取到客 戶端真實的IP地址。 # $remote_addr獲取的是反向代理的IP地址。 反向代理服務器在轉發請求的http頭信息中, # 增長X-Forwarded-For信息,用來記錄客戶端IP地址和客戶端請求的服務器地址。
Syntax: access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]]; access_log off; Default: access_log logs/access.log combined; Context: http, server, location, if in location, limit_except
server { listen 80; server_name code.oldboy.com; #將當前的server網站的訪問日誌記錄至對應的目錄,使用main格式 access_log /var/log/nginx/code.oldboy.com.log main; location / { root /code; } #當有人請求改favicon.ico時,不記錄日誌 location /favicon.ico { access_log off; return 200; } }
[root@nginx conf.d]# cat /etc/logrotate.d/nginx /var/log/nginx/*.log { daily # 天天切割日誌 missingok # 日誌丟失忽略 rotate 52 # 日誌保留52天 compress # 日誌文件壓縮 delaycompress # 延遲壓縮日誌 notifempty # 不切割空文件 create 640 nginx adm # 日誌文件權限 sharedscripts postrotate # 切割日誌執行的命令 if [ -f /var/run/nginx.pid ]; then kill -USR1 `cat /var/run/nginx.pid` fi endscript }
[root@bgx ~]# ll /var/log/nginx/ total 4044 -rw-r----- 1 www adm 54438 Oct 12 03:28 access.log-20181012.gz -rw-r----- 1 www adm 28657 Oct 13 03:48 access.log-20181013.gz -rw-r----- 1 www adm 10135 Oct 12 03:28 error.log-20181130.gz -rw-r----- 1 www adm 7452 Oct 13 03:48 error.log-20181201.gz