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
,就可以訪問監控頁面。這樣很不安全,因為任何人都可以訪問這個頁面。是否可以再新增一個授權模組呢?
個人能力有限如有錯誤歡迎指正。你有更好的解決方案或者建議歡迎一起交流討論,如有疑問歡迎留言。