1. 程式人生 > 其它 >linux下nginx編譯安裝、版本資訊修改

linux下nginx編譯安裝、版本資訊修改

環境

  centos 7

安裝依賴包

yum install -y  gcc gcc-c++ glibc glibc-devel pcre pcre-devel zlib zlib-devel openssl openssl-devel \
unzip psmisc bash-completion libxml2 libxml2-devel libxslt libxslt-devel perl perl-ExtUtils-Embed

下載原始碼包

mkdir /usr/local/src
cd /usr/local/src
wget  http://nginx.org/download/nginx-1.20.1.tar.gz
tar -xf nginx-1.20.1.tar.gz

下載nginx_upstream_check_module模組
yum install -y git 
cd /usr/local/src/
git clone https://github.com/yaoweibin/nginx_upstream_check_module.git

定製版本資訊

  版本號、伺服器型別、錯誤頁顯示

cd /usr/local/src/nginx-1.20.1 

修改版本

  (本例修改為myweb)

 src/core/nginx.h 檔案

  第13行#define NGINX_VERSION

  第14行#define NGINX_VER "nginx/" NGINX_VERSION

sed -i '/define NGINX_VERSION/s/1.20.1/123/' src/core/nginx.h
sed-i '/^#define NGINX_VER.*NGINX_VERSION$/s/nginx/myweb/' src/core/nginx.h

修改HTTP 響應頭

 src/http/ngx_http_header_filter_module.c 檔案

   第49行 static u_char ngx_http_server_string[] = "Server: nginx" CRLF;

sed -i '/static u_char ngx_http_server_string/s/nginx/myweb
/' src/http/ngx_http_header_filter_module.c

修改錯誤頁底部提示

 src/http/ngx_http_special_response.c 檔案

  第36行 static u_char ngx_http_error_tail[] =

"<hr><center>nginx</center>" CRLF

sed -i '36s#nginx#myweb#' src/http/ngx_http_special_response.c

  

最終效果

新增nginx使用者

useradd -r nginx -s /sbin/nologin

編譯安裝

./configure --prefix=/usr/local/nginx \
--user=nginx --group=nginx \
--pid-path=/usr/local/nginx/nginx.pid \
--with-http_ssl_module \
--with-http_realip_module \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--with-http_gunzip_module \
--with-http_v2_module \
--with-pcre \
--with-threads \
--with-file-aio \--with-stream \
--with-stream_ssl_module \
--with-stream_realip_module \
--add-module=/usr/local/src/nginx_upstream_check_module

make -j 4 
make install

服務及開機自啟

  開機啟動

系統服務(systemctl)

  使用systemctl管理:systemctl start | stop | reload | enable | disable nginx

/usr/lib/systemd/system/nginx.service 檔案

[Unit]
Description=The nginx HTTP and reverse proxy server
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target

[Service]
Type=forking
PIDFile=/usr/local/nginx/nginx.pid
# Nginx will fail to start if /run/nginx.pid already exists but has the wrong
# SELinux context. This might happen when running `nginx -t` from the cmdline.
# https://bugzilla.redhat.com/show_bug.cgi?id=1268621
ExecStartPre=/usr/bin/rm -f /run/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
KillSignal=SIGQUIT
TimeoutStopSec=5
KillMode=process
PrivateTmp=true

[Install]
WantedBy=multi-user.target

使用rc.local自啟

  不便或不需寫為服務指令碼放置於/etc/rc.d/init.d/目錄,且又想開機時自動執行的命令,可直接放置於/etc/rc.d/rc.local檔案中

cat >>/etc/rc.d/rc.local<<EOF
/usr/local/nginx/sbin/nginx
EOF

  新增執行許可權

chmod 755 /etc/rc.d/rc.local

環境變數

  使用二進位制nginx管理,不用每次都寫一長串的絕對路徑 nginx [-s reload | stop ]

方法1:PATH變數

cat >>/etc/profile.d/nginx.sh <<EOF
export PATH=/usr/local/nginx/sbin:$PATH
EOF

soure /etc/profile.d/nginx.sh

方法2:軟連結

ln -s /usr/local/nginx/sbin/nginx /usr/bin

不顯示版本號

主配置檔案中新增

server_tokens off;