1. 程式人生 > >Nginx新增第三方模組並平滑升級

Nginx新增第三方模組並平滑升級

Nginx 新增第三方模組

眾所周知Nginx是分成一個個模組的,比如core模組,gzip模組,proxy模組,每個模組負責不同的功能,除了基本的模組,有些模組可以選擇編譯或不編譯進Nginx。官網文件中的Modules reference部分列出了nginx原始碼包的所有模組。我們可以按照自己伺服器的需要來定製出一個最適合自己的Nginx伺服器。

除了Nginx官網原始碼包提供了各種模組,Nginx還有各種各樣的第三方模組。官方文件NGINX 3rd Party Modules也列出了Nginx的很多第三方模組,除此官網列出的之外,還有很多很有用的模組也能在Github等網站上找到。

這些模組提供著各種各樣意想不到的功能,靈活使用Nginx的第三方模組,可能會有非常大的意外收穫。

本篇文章以GitHub上的nginx-module-vts作為例子,此模組可以監控Nginx虛擬主機流量以及狀態,下面我們來看一下第三模組的安裝以及簡單的使用。

下載第三方模組

下載的模組存放在/home/nginx_conf/

shell> cd /home/nginx_conf/
shell> git clone git://github.com/vozlt/nginx-module-vts.git

新增模組編譯Nginx

檢視當前Nginx編譯引數

shell> /usr/local/nginx/sbin/nginx -V

如果覺得每次操作Nginx都需要攜帶Nginx的PATH比較煩,你可以將Nginx的PATH新增到環境變數中

shell> cd /etc/profile.d/
shell> vi nginx.sh

在 nginx.sh中新增如下內容

export NGINX_HOME=/usr/local/nginx
export PATH=$NGINX_HOME/sbin:$PATH

儲存nginx.sh後使其配置生效

shell> source /etc/profile

下面就可以在任意目錄中執行nginx命令不用攜帶PATH了

shell> nginx -V 
nginx version: nginx/1.14.0
built by gcc 4.8.5 20150623
(Red Hat 4.8.5-28) (GCC) built with OpenSSL 1.0.2k-fips 26 Jan 2017 TLS SNI support enabled configure arguments: --with-http_gzip_static_module --with-http_stub_status_module --with-http_ssl_module --with-pcre --with-file-aio --with-http_realip_module

新增模組編譯

在獲取的編譯引數中再新增需要的模組

 --add-module= PATH
 # 這裡具體路徑為
 --add-module=/home/nginx_conf/module/nginx-module-vts

最終的配置如下

shell>./configure \
--with-http_gzip_static_module \
--with-http_stub_status_module \
--with-http_ssl_module \
--with-pcre \
--with-file-aio \
--with-http_realip_module \
--add-module=/home/nginx_conf/module/nginx-module-vts

執行編譯命令:make,注意編譯之後千萬不能執行make install

編譯完後,當前nginx原始碼目錄下生成objs目錄則說明編譯成功

覆蓋Nginx執行指令碼

  • 備份當前nginx執行指令碼,命令:cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak。如果拷貝出錯,則將nginx進行殺掉再進行,命令:killall nginx 或者 nginx -s stop

  • 拷貝上一步驟編譯後的新nginx指令碼,命令:cp /home/software/nginx-1.14.0/objs/nginx /usr/local/nginx/sbin/

  • home/software/nginx-1.14.0/下載執行make upgrade 平滑升級Nginx

  • 檢視編譯引數,命令:nginx -V,如果編譯引數中存在剛新增的模組,則說明編譯成功

使用第三方模組

http {
    vhost_traffic_status_zone;

    ...

    server {

        ...

        location /status {
            vhost_traffic_status_display;
            vhost_traffic_status_display_format html;
        }
    }
}

思考:
這個監控Nginx伺服器執行情況的模組。只要使用者在瀏覽器輸入http://your_ip/status,就可以訪問監控頁面。這樣很不安全,因為任何人都可以訪問這個頁面。是否可以再新增一個授權模組呢?

個人能力有限如有錯誤歡迎指正。你有更好的解決方案或者建議歡迎一起交流討論,如有疑問歡迎留言。