寫在前面的話css
提及 Nginx,別說運維,就是不少開發人員也很熟悉,畢竟現在已經 2019 年了,Apache 更多的要麼成爲了歷史,要麼成爲了歷史殘留。html
咱們在說起 Nginx 的時候,一直在強調他是一個輕量級,高性能的web,反向代理,郵箱(IMAP/POP3)代理服務器。nginx
和傳統的服務不一樣,Nginx 不依賴線程來處理請求。下面是它的 logo,沒啥特點:c++
本文將主要談談 1.16 版本 Nginx 的編譯安裝以及編譯參數的問題!git
編譯安裝github
咱們能夠前往 Nginx 的官網下載咱們的源碼安裝包:web
對於生產應用,穩定放在第一位,因此咱們選擇下載 Stable 版本,固然,咱們的系統確定是 CentOS 7.5。app
最後是一個老生常談的問題,也是運維人員區別於開發人員的問題。若是我是開發人員,只願意切換到對應的源,一個 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
gzip 模塊所需的 zlib 庫源碼包:zlib-1.2.11
ssl 功能所須要的 openssl 庫源碼包:openssl-1.1.1c
文件下載界面美化模塊:ngx-fancyindex
https://github.com/aperezdc/ngx-fancyindex
上傳模塊:nginx-upload-module
cache 處理模塊:ngx_cache_purge
fair 負載均衡調度模塊:nginx-upstream-fair
以上提到的都是咱們一些經常使用的插件庫,仍是那句話,可能不是必須,但說不定哪天就用到了。
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 模塊爲例:
該模塊能夠在 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 安裝的話其實不少模塊是不存在的。後續咱們會談談配置,調優以及各類常見不常見的需求實現。