【01】Nginx:編譯安裝/動態添加模塊


寫在前面的話

 

說起 Nginx,別說運維,就是很多開發人員也很熟悉,畢竟如今已經 2019 年了,Apache 更多的要么成為了歷史,要么成為了歷史殘留。

我們在提及 Nginx 的時候,一直在強調他是一個輕量級,高性能的web,反向代理,郵箱(IMAP/POP3)代理服務器。

和傳統的服務不同,Nginx 不依賴線程來處理請求。下面是它的 logo,沒啥特色:

本文將主要談談 1.16 版本 Nginx 的編譯安裝以及編譯參數的問題!

 

 

編譯安裝

 

我們可以前往 Nginx 的官網下載我們的源碼安裝包:

http://nginx.org/en/download.html

對於生產應用,穩定放在第一位,所以我們選擇下載 Stable 版本,當然,我們的系統肯定是 CentOS 7.5。

最后是一個老生常談的問題,也是運維人員區別於開發人員的問題。如果我是開發人員,只願意切換到對應的源,一個 yum 命令搞定。但是作為運維人員,我們需要對於服務進行定制化安裝。雖然有些時候讓這個服務變得不那么便於使用。但是一定會變得更為容易管理。我們應當把管理放在首位。

 

1. 先把常用的一些依賴安裝上:

yum -y install zip unzip gcc gcc-c++ automake autoconf libtool make glibc gd-devel pcre-devel libmcrypt-devel mhash-devel libxslt-devel libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel libidn libidn-devel openssl openssl-devel libevent libevent-devel

這些依賴有些並不是 Nginx 所必須,但是屬於那種裝了准沒錯的類型。否則你如果去按照報錯提示一個一個的補充,估計得搞死。

同時,我們需要幾個單獨得安裝包:

我這里提供了百度網盤的下載地址,需要的可以去這里直接下載:

鏈接: https://pan.baidu.com/s/1IpRtZgYFb-Kf71ED3pBEwQ 提取碼: 2k6t

 

下面是關於這幾個模塊的具體說明和項目地址:

rewrite 需要的 PCRE 庫源碼包:pcre-8.43

https://ftp.pcre.org/pub/pcre/

 

gzip 模塊所需的 zlib 庫源碼包:zlib-1.2.11

http://www.zlib.net/

 

ssl 功能所需要的 openssl 庫源碼包:openssl-1.1.1c

https://www.openssl.org/source/

 

文件下載界面美化模塊:ngx-fancyindex

https://github.com/aperezdc/ngx-fancyindex

 

上傳模塊:nginx-upload-module

https://github.com/winshining/nginx-upload-module

 

cache 處理模塊:ngx_cache_purge

https://github.com/FRiCKLE/ngx_cache_purge/

 

fair 負載均衡調度模塊:nginx-upstream-fair

https://github.com/gnosek/nginx-upstream-fair/tree/master

以上提到的都是我們一些常用的插件庫,還是那句話,可能不是必須,但說不定哪天就用到了。

 

2. 安裝目錄設計和用戶設計:

/data 目錄作為我們整個服務的根目錄。

packages 目錄下 nginx 目錄用於存放我們本次編譯的所有源碼包。

logs 目錄 nginx 目錄用於存放我們的日志,pid 等文件。

services 目錄下 nginx 用於存放我們本次編譯安裝的服務。

backup 目錄下 nginx 目錄用於我們日常配置文件備份,證書等文件備份。

創建這些目錄:

mkdir -p /data/services
mkdir -p /data/packages/nginx
mkdir -p /data/logs/nginx
mkdir -p /data/backup/nginx

本次 nginx 服務的用戶將以 nginx 用戶作為服務運行的用戶:

groupadd nginx
useradd -g nginx nginx

 

3. 解壓安裝包:

cd /data/packages/nginx
# 解壓安裝包 tar -zxf nginx-1.16.0.tar.gz tar -zxf openssl-1.1.1c.tar.gz tar -zxf pcre-8.43.tar.gz tar -zxf zlib-1.2.11.tar.gz unzip nginx-upload-module-master.zip unzip ngx-fancyindex-master.zip
unzip nginx-upstream-fair-master.zip
unzip ngx_cache_purge-master.zip

由於 upstream_fair 模塊存在 bug,需要修改一下:

cd nginx-upstream-fair-master/
sed -i 's/default_port/no_port/g' ngx_http_upstream_fair_module.c

否則會報錯:ngx_http_upstream_srv_conf_t’沒有名為‘default_port’的成員

 

4. 編譯安裝包:

cd /data/packages/nginx/nginx-1.16.0

# 編譯檢測
./configure --prefix=/data/services/nginx \
--user=nginx \
--group=nginx \--with-http_stub_status_module \
--with-http_gzip_static_module \
--with-http_flv_module \
--with-http_ssl_module \
--with-http_mp4_module \
--with-stream \
--with-http_realip_module \
--with-http_v2_module \
--with-http_sub_module \
--with-http_image_filter_module \
--with-pcre=/data/packages/nginx/pcre-8.43 \
--with-openssl=/data/packages/nginx/openssl-1.1.1c \
--with-zlib=/data/packages/nginx/zlib-1.2.11 \
--add-module=/data/packages/nginx/nginx-upload-module-master \
--add-module=/data/packages/nginx/nginx-upstream-fair-master \
--add-module=/data/packages/nginx/ngx_cache_purge-master \
--add-module=/data/packages/nginx/ngx-fancyindex-master

# 編譯安裝
make && make install

 

我們可以簡單了解一下部分常用的編譯參數的含義:

cd /data/packages/nginx/nginx-1.16.0
./configure --help

如下:

參數 含義
--prefix=PATH 指定安裝路徑,默認 /usr/local 下
--sbin-path=PATH 指定 sbin 目錄,一般不用指定,在安裝目錄下即可
--conf-path=PATH 指定配置文件的路徑,也不用修改它,否則不好管理
--error-log-path=PATH 和 --http-log-path=PATH(不建議指定) 默認日志路徑,這個我們可以修改為我們設計的
--pid-path=PATH 和 --lock-path=PATH(不建議指定) pid 文件和 lock 文件路徑,我們也可以把它放到 logs 目錄下
--user=USER 和 --group=GROUP 指定 nginx 允許的用戶名和用戶組,我們這里使用 nginx 用戶
--with-http_ssl_module HTTPS 的關鍵模塊
--with-http_realip_module 用於獲取客戶端請求的真實 IP 等作用
--with-http_image_filter_module 圖片處理,實現圖片放大縮小裁切等功能
--with-http_geoip_module 用於 IP 訪問控制,例如黑白名單
--with-http_sub_module 用於字符串替換
--with-http_flv_module 和 --with-http_mp4_module 流媒體處理模塊
--with-http_gunzip_module 和 --with-http_gzip_static_module 資源壓縮,靜態資源壓縮
--without-http_auth_basic_module 禁用用戶認證模塊,該模塊可以用於網頁登錄驗證
--with-http_auth_request_module 支持第三方認證
--with-http_stub_status_module nginx 狀態
--with-stream TCP / UDP 代理模塊
--with-pcre=DIR 指定 PCRE 目錄
--with-zlib=DIR 指定 zlib 目錄
--with-openssl=DIR 指定 openssl 目錄
--with-http_addition_module 用於給響應的網站追加內容,比如追加 css / js
--with-http_random_index_module 從目錄中隨機挑選索引
--add-module=PATH 添加其他模塊

 

5. 修改目錄權限並修改配置:

# 編譯安裝
make && make install

# 修改權限
chown -R nginx.nginx /data/services/nginx/ 
chown -R nginx.nginx /data/logs/nginx/ 
chown -R nginx.nginx /data/backup/nginx/ 

# 修改配置
cd /data/services/nginx/conf
mv nginx.conf nginx.conf_bak

精簡基礎配置如下:nginx.conf

user  nginx;
worker_processes  auto;

error_log  /data/logs/nginx/error.log  info;
pid        /data/logs/nginx/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile      on;
    
    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  /data/logs/nginx/access.log  main;

    server {
        listen       80;
        server_name  localhost;
        
        location / {
            root   html;
            index  index.html index.htm;
        }

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

 

6. 檢測配置,啟動服務:

/data/services/nginx/sbin/nginx -t
/data/services/nginx/sbin/nginx

訪問查看:

 

7. 至此,基礎配置完成!

 

 

動態添加模塊

 

某些時候可能我們會發現少編譯了某個模塊,我們需要后續加上去,這時候就需要動態編譯添加了!

我們這里以添加 echo 模塊為例:

https://github.com/openresty/echo-nginx-module

該模塊可以在 nginx 實現 echo 內容,適合用於調試。

 

1. 查看當前的編譯:

/data/services/nginx/sbin/nginx -V

結果如下:

 

2. 進入我們之前的解壓包路徑,添加我們需要的參數重新編譯:

解壓模塊:

cd /data/packages/nginx
unzip echo-nginx-module-master.zip

重新檢查:

./configure --prefix=/data/services/nginx \
--user=nginx \
--group=nginx \--with-http_stub_status_module \
--with-http_gzip_static_module \
--with-http_secure_link_module \
--with-http_flv_module \
--with-http_ssl_module \
--with-http_mp4_module \
--with-stream \
--with-http_realip_module \
--with-http_v2_module \
--with-http_sub_module \
--with-http_image_filter_module \
--with-pcre=/data/packages/nginx/pcre-8.43 \
--with-openssl=/data/packages/nginx/openssl-1.1.1c \
--with-zlib=/data/packages/nginx/zlib-1.2.11 \
--add-module=/data/packages/nginx/nginx-upload-module-master \
--add-module=/data/packages/nginx/nginx-upstream-fair-master \
--add-module=/data/packages/nginx/ngx_cache_purge-master \
--add-module=/data/packages/nginx/ngx-fancyindex-master \
--add-module=/data/packages/nginx/echo-nginx-module-master

編譯:

make 

注意:

只 make 不 make install,否則就完了。

只 make 不 make install,否則就完了。

只 make 不 make install,否則就完了。

重要的事情說三遍!

 

3. 備份舊版,替換新版:

# 備份
mv /data/services/nginx/sbin/nginx  /data/backup/nginx/nginx_$(date +%F)

# 更新
cp /data/packages/nginx/nginx-1.16.0/objs/nginx /data/services/nginx/sbin/

# 查看
/data/services/nginx/sbin/nginx -V

結果如下:

 

 

一鍵安裝腳本

 

https://github.com/KU4NG/OP-Shell/tree/master/CentOS-7/nginx

 

 

小結

 

nginx 算是運維必備技能,我們只是講了編譯安裝,如果你是 yum 安裝的話其實很多模塊是不存在的。后續我們會談談配置,調優以及各種常見不常見的需求實現。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM