「源產控」系列(二)在CentOS 8上使用Nginx 1.18: 編譯安裝與基本使用

本篇爲慧響技術角「源產控」專題系列第2篇文章。html

慧響技術角「源產控」專題,將聚焦開源、國產化、自主可控三個方向的技術,以操做系統、中間件、數據庫、程序應用等爲粗分類,更新相關技術的發展趨勢、探究技術核心的深度使用、系統總結技術總體架構,爲對相關技術的學習者提供可觀的資料,亦爲我的同步學習總結的筆記,以饗讀者。nginx

本篇對在CentOS 8上使用Nginx 1.18的基本安裝與基本使用進行介紹與總結,將來對在CentOS 8上使用Nginx 1.18的相關,將陸續更新其使用總結、性能調優等方面的系列文章,敬請期待。正則表達式

Nginx是個啥

Nginx(發音同「engine X」)是異步框架的網頁服務器,也能夠用做反向代理、負載平衡器和HTTP緩存。該軟件由伊戈爾·賽索耶夫建立並於2004年首次公開發布。2011年成立同名公司以提供支持。2019年3月11日,Nginx公司被F5 Networks以6.7億美圓收購。Nginx是免費的開源軟件,根據類BSD許可證的條款發佈。一大部分Web服務器使用Nginx,一般做爲負載均衡器。shell

其開源版本官網是nginx.org。商業版本官網是nginx.com。數據庫

不過提及來Nginx,就不得不提在Nginx被F5收購後Nginx做者被捕的事兒了。據外媒報道,2019年12月12日,俄羅斯警方搜查了商業服務器公司Nginx,並當場帶走了兩位聯合創始人。。關於這個事兒,我在文章《戰疫之下,哪些事可能會改變咱們》也拿其爲例對我的品牌與口碑塑造的一些風險進行了闡述。有興趣的能夠點進去看一看。vim

對於Nginx,因爲其發展迅速、性能卓越、開源開放,收割了不少Web服務提供與負載均衡、反向代理場景的市場,也衍生了很優秀的二次開發版本例如國人開發的OpenResty、阿里開源的Tengine等。在「在CentOS 8上使用Nginx 1.18」系列後面將擇機對兩個優秀的二次開發進行介紹。瀏覽器

在CentOS 8進行安裝Nginx 1.18

雖然咱們能夠經過yum -y install nginx進行安裝,可是在「源產庫」系列第一篇文章《CentOS 8之初相識》中有過介紹,其鏡像源預編譯的版本爲1.14,而截至文章發表之日Nginx的穩定版本已更新到了1.18,主線版本更新到了1.19,所以咱們使用官網的穩定源碼版本進行下載編譯。緩存

Nginx版本下載頁,截至發文(2020-07-07)穩定版本已更新到了1.18,主線版本更新到了1.19

小知識:關於穩定版本和主線版本。前者是Nginx更新接收針對高嚴重性錯誤的修復,但不會使用最新的功能,其版本號的第二位用偶數表示。然後者是Nginx是更新活躍的開發分支,其添加了最新功能和錯誤修復,其版本號的第二位用奇數表示。不過在Nginx中,「穩定」指的是功能和更新頻率,它與軟件質量無關。穩定分支在其生命週期中從不接收新功能,而且一般僅接收一個或兩個更新,用於修復嚴重的錯誤。 穩定分支的生命週期通常是一年,每一年四月官方就會中止對當前穩定分支的維護,再也不提供錯誤修復補丁。服務器

下載並解壓nginx-1.18.0.tar.gz架構

wget http://nginx.org/download/nginx-1.18.0.tar.gz;
tar -zxvf nginx-1.18.0.tar.gz;
複製代碼

進入目錄cd nginx-1.18.0,目錄結構以下:

總用量 1204
drwxr-xr-x 6 1001 1001    326 7月   7 18:50 auto
-rw-r--r-- 1 1001 1001 302863 4月  21 22:09 CHANGES
-rw-r--r-- 1 1001 1001 462213 4月  21 22:09 CHANGES.ru
drwxr-xr-x 2 1001 1001    168 7月   7 18:50 conf
-rwxr-xr-x 1 1001 1001   2502 4月  21 22:09 configure
drwxr-xr-x 4 1001 1001     72 7月   7 18:50 contrib
drwxr-xr-x 2 1001 1001     40 7月   7 18:50 html
-rw-r--r-- 1 1001 1001   1397 4月  21 22:09 LICENSE
drwxr-xr-x 2 1001 1001     21 7月   7 18:50 man
-rw-r--r-- 1 1001 1001     49 4月  21 22:09 README
drwxr-xr-x 9 1001 1001     91 7月   7 18:50 src
複製代碼

conf文件夾內爲Nginx的初始配置文件,contrib文件夾放置了三位開源貢獻者貢獻的三個插件內容,html文件夾爲默認站點文件內容,src文件夾爲Nginx源碼。configure文件爲編譯的配置文件。

拷貝Nginx安裝包內以下文件到路徑,可讓vim對nginx.conf的語言語法進行高亮解析:

cp -r contrib/vim/* ~/.vim/;
複製代碼

./configure --help能夠查看Nginx編譯支持參數列表,configure文件進行設置後,會在objs文件內生成Nginx的安裝所需文件,其中ngx_modules.c,該文件決定接下來編譯有哪些模塊須要編譯進Nginx。

本文不涉及模塊的編譯使用,咱們使用最簡單的編譯設置進行編譯安裝:

./configure --prefix=/usr/local/nginx;
複製代碼

若是報以下錯誤,請執行命令yum -y install pcre-devel openssl openssl-devel進行安裝:

...
checking for PCRE library ... not found
checking for PCRE library in /usr/local/ ... not found
checking for PCRE library in /usr/include/pcre/ ... not found
checking for PCRE library in /usr/pkg/ ... not found
checking for PCRE library in /opt/local/ ... not found

./configure: error: the HTTP rewrite module requires the PCRE library.
You can either disable the module by using --without-http_rewrite_module
option, or install the PCRE library into the system, or build the PCRE library
statically from the source with nginx by using --with-pcre=<path> option.
複製代碼

出現如下內容,即爲configure文件設置完成:

Configuration summary
  + using system PCRE library
  + OpenSSL library is not used
  + using system zlib library

  nginx path prefix: "/usr/local/nginx/"
  nginx binary file: "/usr/local/nginx/sbin/nginx"
  nginx modules path: "/usr/local/nginx/modules"
  nginx configuration prefix: "/usr/local/nginx/conf"
  nginx configuration file: "/usr/local/nginx/conf/nginx.conf"
  nginx pid file: "/usr/local/nginx/logs/nginx.pid"
  nginx error log file: "/usr/local/nginx/logs/error.log"
  nginx http access log file: "/usr/local/nginx/logs/access.log"
  nginx http client request body temporary files: "client_body_temp"
  nginx http proxy temporary files: "proxy_temp"
  nginx http fastcgi temporary files: "fastcgi_temp"
  nginx http uwsgi temporary files: "uwsgi_temp"
  nginx http scgi temporary files: "scgi_temp"
複製代碼

緊接着執行make命令,執行後,在objs文件夾下能夠看到編譯後的nginx二進制文件和目標文件。無報錯說明正常。如若首次安裝Nginx,緊接着執行make install安裝便可。若是是進行Nginx升級,make install是不該該用的,須要作的是將該目錄下生成的nginx二進制文件拷貝到已有Nginx的二進制文件相應目錄中。

在CentOS 8初步使用Nginx 1.18

安裝完成,輸入以下命令進行啓動Nginx:

/usr/local/nginx/sbin/nginx;
複製代碼

Nginx基本指令格式爲nginx -s reload,具體指令解釋以下:

  • nginx -?/-h爲顯示幫助信息;
  • nginx -c爲使用指定的配置文件,後跟配置文件路徑;
  • nginx -g爲指定配置指令,後跟須要指定的配置指令;
  • nginx-p爲指定運行目錄,後跟運行目錄路徑;
  • nginx -s發送信號,其中後跟參數stop爲當即中止服務、quit爲有序中止服務;reload爲重載配置文件、reopen爲從新開始記錄日誌文件;
  • nginx -t/-T測試配置文件是否有語法錯誤;
  • nginx -v、nginx -V打印Nginx的版本信息或編譯信息。

在瀏覽器訪問IP,如圖,能夠訪問即正常。

在瀏覽器訪問IP,如圖,能夠訪問即正常

ps -ef | grep nginx查看進程狀況:

root      8556     1  0 19:24 ?        00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
nobody    8557  8556  0 19:24 ?        00:00:00 nginx: worker process
root      8561  8702  0 19:25 pts/0    00:00:00 grep --color=auto nginx
複製代碼

如今安裝好的基本Nginx,完整的nginx.conf文件以下:

#user  nobody;
worker_processes  auto;

error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  logs/access.log  main;

    server {
        listen       80;
        server_name  localhost;

        access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}
複製代碼

Nginx配置語法有以下的規則:

  1. 日誌文件由指令與指令塊構成;
  2. 每條指令以;結尾,指令與參數間以空格符號分隔;
  3. 指令塊以{}將多條指令組織在一塊兒;
  4. include語句容許組合多個配置文件以提高可維護性;
  5. 使用#添加註釋,提升可讀性;
  6. 使用$可調用變量;
  7. 部分指令的參數支持正則表達式。

Nginx有多種指令塊,其中http塊表示此爲HTTP協議處理塊、upstream表示有上游服務提供的配置信息、location對應URL的表達式、server對應一個或一組域/域名的訪問。

如下是配置文件部分的參數解釋:

  • worker_processes爲設定工做進程數,若設置爲auto則Nginx將根據機器的內核數進行設定分配,如無特殊需求通常建議設置爲auto
  • error_log設定錯誤日誌的路徑與等級,其中等級有debug, info, notice, warn, error, crit, alert, emerg幾種,以嚴重性從高到低的順序列出。根據官方文檔的解釋,設定某個級別的意義是該級別及以上的日誌會被打印在日誌文件中,例如設置info則包括其自己在內以及notice, warn, error, crit, alert, emerg都會被列出。若第二個字段爲空,默認爲error
  • log_format main 'XXX'設定日誌格式,main標示爲命名,在遇到對不一樣域名進行不一樣格式的命名記錄時須要用到,server區塊下access_log logs/access.log main;能夠以main格式進行記錄。

關於其餘參數例如pidworker_connections等,以及serverupstreamlocation指令塊,將在後續的「在CentOS 8上使用Nginx 1.18」系列文章中陸續介紹與展現使用方法。

參考資料

  1. nginx 主線版 1.17.0 發佈,1.14 穩定分支已中止維護
  2. Index - nginx.org
  3. Core functionality - nginx.org
相關文章
相關標籤/搜索