linux下nginx編譯安裝、版本資訊修改
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.gztar -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;