1. 程式人生 > 其它 >給已安裝的nginx新增新模組

給已安裝的nginx新增新模組

有個需求的實現需要通過nginx的ngx_http_realip_module模組,但是這個模組我在安裝nginx的時候並沒有加上,只有重新編譯加上去。我看了以下網上各種博文,基本上就是你抄我,我抄你,有以下這些步驟

# 1. 下載模組的原始碼包,假設把模組原始碼放在/data/software下

# 2. 解壓與正在跑的nginx同版本的原始碼包

# 3. 檢視正在跑的nginx編譯安裝了哪些模組 configure arguments段
[root@test-1 nginx-1.20.1]# nginx -V
nginx version: nginx/1.20.1
built by gcc 9.3.1 20200408 (Red Hat 9.3.1-2) (GCC) 
built with OpenSSL 1.0.2k-fips  26 Jan 2017
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module --with-stream --user=nginx

# 4. 使用--add-module加上新的模組,重新初始化
./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module --with-stream --user=nginx --add-mode=/data/software/xxxx

# 5. 編譯,不要make install
make

# 6. 替換nginx二進位制檔案
cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak
cp objs/nginx /usr/local/nginx/sbin/nginx

# 7. 重啟
/usr/local/nginx/sbin/nginx -s reload

我覺得這幾個步驟有部分還是有些問題。
比如:

  1. 第一步下載模組原始碼,nginx模組並非都是nginx官方開發,原始碼沒有一個統一的路徑,找模組原始碼費時費力。
  2. 第四步使用--add-module加上模組原始碼位置,再使用make編譯的時候,我報錯了
  3. 第六步替換是不能直接替換的,因為nginx還在執行,直接替換會報錯。大多數部落格怕是抄完了都沒去試一下。
    cp: cannot create regular file ‘/usr/local/nginx/sbin/nginx’: Text file busy
    

所以我也不找原始碼了,直接使用--with方式,這種方式就是把模組編譯進nginx的二進位制檔案。
我的步驟如下

# 1. 解壓與正在跑的nginx同版本的原始碼包

# 2. 檢視正在跑的nginx編譯安裝了哪些模組 configure arguments段
[root@test-1 nginx-1.20.1]# nginx -V
nginx version: nginx/1.20.1
built by gcc 9.3.1 20200408 (Red Hat 9.3.1-2) (GCC) 
built with OpenSSL 1.0.2k-fips  26 Jan 2017
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module --with-stream --user=nginx

# 3. 重新初始化
./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module --with-stream --user=nginx --with-http_realip_module

# 4. 編譯
make

# 5. 替換二進位制檔案並重啟nginx
cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak
/usr/local/nginx/sbin/nginx -s stop
\cp objs/nginx /usr/local/nginx/sbin/nginx
/usr/local/nginx/sbin/nginx

我發現這樣做同樣可以使用新的模組。如果這樣做有什麼問題或隱患,還請在評論中指正,謝謝。