nginx-1.24编译安装
1.创建压缩包存放路径
[root@localhost /]# mkdir -p /apps/scripts
[root@localhost /]# cd /apps/scripts/
2.上传所需文件
3.初始化环境
[root@localhost scripts]# yum install -y yum-utils device-mapper-persistent-data lvm2 wget net-tools nfs-utils lrzsz gcc gcc-c++ make cmake libxml2-devel openssl-devel curl curl-devel unzip sudo libaio-devel wget vim ncurses-devel autoconf automake zlib-devel python-devel epel-release openssh-server socat ipvsadm conntrack telnet ipvsadm vim
4.压缩包解压
[root@localhost scripts]# tar -zxf nginx-1.24.0.tar.gz
[root@localhost scripts]# tar -zxf nginx-module-vts-0.2.2.tar.gz
[root@localhost scripts]# tar -zxf ngx_brotli.tgz
[root@localhost scripts]# tar -zxf openssl-1.1.1w.tar.gz
[root@localhost scripts]# tar -zxf pcre-8.45.tar.gz
[root@localhost scripts]# tar -zxf zlib-1.3.tar.gz
[root@localhost scripts]# unzip nginx-sticky-module-ng-08a395c66e42.zip
[root@localhost scripts]# unzip ngx_http_proxy_connect_module-master.zip
5.检测编译环境加模块
[root@localhost scripts]# cd /apps/scripts/nginx-1.24.0
[root@localhost nginx-1.24.0]# ./configure --prefix=/apps/nginx --modules-path=/apps/nginx/modules --with-compat --with-stream --with-stream_ssl_module --with-stream_realip_module --with-stream_ssl_preread_module --with-threads --with-file-aio --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_auth_request_module --with-http_random_index_module --with-http_secure_link_module --with-http_degradation_module --with-http_slice_module --with-http_stub_status_module --with-zlib=/apps/scripts/zlib-1.3 --with-pcre=/apps/scripts/pcre-8.45 --with-openssl=/apps/scripts/openssl-1.1.1w --add-module=/apps/scripts/nginx-goodies-nginx-sticky-module-ng-08a395c66e42 --add-module=/apps/scripts/nginx-module-vts-0.2.2 --add-module=/apps/scripts/ngx_brotli
6.编译
[root@localhost nginx-1.24.0]# make
6.1 编译出现异常
出现报错,详细如下:
/apps/scripts/nginx-goodies-nginx-sticky-module-ng-08a395c66e42/ngx_http_sticky_module.c: In function ‘ngx_http_init_sticky_peer’:
/apps/scripts/nginx-goodies-nginx-sticky-module-ng-08a395c66e42/ngx_http_sticky_module.c:207:54: error: ‘ngx_http_headers_in_t’ has no member named ‘cookies’
if (ngx_http_parse_multi_header_lines(&r->headers_in.cookies, &iphp->sticky_conf->cookie_name, &route) != NGX_DECLINED) {
^
/apps/scripts/nginx-goodies-nginx-sticky-module-ng-08a395c66e42/ngx_http_sticky_module.c:207:2: error: passing argument 2 of ‘ngx_http_parse_multi_header_lines’ from incompatible pointer type [-Werror]
if (ngx_http_parse_multi_header_lines(&r->headers_in.cookies, &iphp->sticky_conf->cookie_name, &route) != NGX_DECLINED) {
^
In file included from /apps/scripts/nginx-goodies-nginx-sticky-module-ng-08a395c66e42/ngx_http_sticky_module.c:9:0:
src/http/ngx_http.h:106:18: note: expected ‘struct ngx_table_elt_t *’ but argument is of type ‘struct ngx_str_t *’
ngx_table_elt_t *ngx_http_parse_multi_header_lines(ngx_http_request_t *r,
^
/apps/scripts/nginx-goodies-nginx-sticky-module-ng-08a395c66e42/ngx_http_sticky_module.c:207:2: error: too few arguments to function ‘ngx_http_parse_multi_header_lines’
if (ngx_http_parse_multi_header_lines(&r->headers_in.cookies, &iphp->sticky_conf->cookie_name, &route) != NGX_DECLINED) {
^
In file included from /apps/scripts/nginx-goodies-nginx-sticky-module-ng-08a395c66e42/ngx_http_sticky_module.c:9:0:
src/http/ngx_http.h:106:18: note: declared here
ngx_table_elt_t *ngx_http_parse_multi_header_lines(ngx_http_request_t *r,
^
cc1: all warnings being treated as errors
make[1]: *** [objs/addon/nginx-goodies-nginx-sticky-module-ng-08a395c66e42/ngx_http_sticky_module.o] Error 1
make[1]: Leaving directory `/apps/scripts/nginx-1.24.0'
make: *** [build] Error 2
6.2 异常处理
查询相关资料,该报错可能是因为nginx版本与ngx_http_proxy_connect_module-master中patch版本不符导致。以下为版本对应图:
参考上述对应图,部署nginx-1.24需指定为proxy_connect_rewrite_102101.patch
安装patch命令
[root@localhost nginx-1.24.0]# yum -y install patch.x86_64
[root@localhost nginx-1.24.0]# patch -p1 < /apps/scripts/ngx_http_proxy_connect_module-master/patch/proxy_connect_rewrite_102101.patch
再次:检测编译环境 加模块及编译
依旧报错:
/apps/scripts/nginx-goodies-nginx-sticky-module-ng-08a395c66e42/ngx_http_sticky_module.c: In function ‘ngx_http_init_sticky_peer’:
/apps/scripts/nginx-goodies-nginx-sticky-module-ng-08a395c66e42/ngx_http_sticky_module.c:207:54: error: ‘ngx_http_headers_in_t’ has no member named ‘cookies’
if (ngx_http_parse_multi_header_lines(&r->headers_in.cookies, &iphp->sticky_conf->cookie_name, &route) != NGX_DECLINED) {
^
/apps/scripts/nginx-goodies-nginx-sticky-module-ng-08a395c66e42/ngx_http_sticky_module.c:207:2: error: passing argument 2 of ‘ngx_http_parse_multi_header_lines’ from incompatible pointer type [-Werror]
if (ngx_http_parse_multi_header_lines(&r->headers_in.cookies, &iphp->sticky_conf->cookie_name, &route) != NGX_DECLINED) {
^
In file included from /apps/scripts/nginx-goodies-nginx-sticky-module-ng-08a395c66e42/ngx_http_sticky_module.c:9:0:
src/http/ngx_http.h:106:18: note: expected ‘struct ngx_table_elt_t *’ but argument is of type ‘struct ngx_str_t *’
ngx_table_elt_t *ngx_http_parse_multi_header_lines(ngx_http_request_t *r,
^
/apps/scripts/nginx-goodies-nginx-sticky-module-ng-08a395c66e42/ngx_http_sticky_module.c:207:2: error: too few arguments to function ‘ngx_http_parse_multi_header_lines’
if (ngx_http_parse_multi_header_lines(&r->headers_in.cookies, &iphp->sticky_conf->cookie_name, &route) != NGX_DECLINED) {
^
In file included from /apps/scripts/nginx-goodies-nginx-sticky-module-ng-08a395c66e42/ngx_http_sticky_module.c:9:0:
src/http/ngx_http.h:106:18: note: declared here
ngx_table_elt_t *ngx_http_parse_multi_header_lines(ngx_http_request_t *r,
^
cc1: all warnings being treated as errors
make[1]: *** [objs/addon/nginx-goodies-nginx-sticky-module-ng-08a395c66e42/ngx_http_sticky_module.o] Error 1
make[1]: Leaving directory `/apps/scripts/nginx-1.24.0'
make: *** [build] Error 2
继续查询相关资料,有一种思路为替换配置文件,尝试一下是否可行
[root@localhost nginx-1.24.0]# cd /apps/scripts/nginx-goodies-nginx-sticky-module-ng-08a395c66e42/
[root@localhost nginx-goodies-nginx-sticky-module-ng-08a395c66e42]# sed -i "s/ngx_http_parse_multi_header_lines.*/ngx_http_parse_multi_header_lines(r, r->headers_in.cookie, \&iphp->sticky_conf->cookie_name, \&route) != NULL){/g" ngx_http_sticky_module.c
再次:检测编译环境 加模块及编译
方法可行,没有报错了
7.安装
[root@localhost nginx-1.24.0]# make install
8.验证
9.将nginx服务注册为系统服务
编写服务nginx.service,将该文件放置于/etc/systemd/system/下,执行:systemctl daemon-reload重新加载systemd守护进程
系统服务文件中,路径需要根据实际情况调整
[Unit]
Description=nginx web server
Documentation=https://nginx.org/en/docs/
After=syslog.target network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/apps/nginx/logs/nginx.pid
ExecStartPost=/bin/sleep 0.1
ExecStartPre=/apps/nginx/sbin/nginx -t -c /apps/nginx/conf/nginx.conf
ExecStart=/apps/nginx/sbin/nginx -c /apps/nginx/conf/nginx.conf
ExecReload=/apps/nginx/sbin/nginx -s reload -c /apps/nginx/conf/nginx.conf
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=false
[Install]
WantedBy=multi-user.target
10.常用命令
开机自启动:systemctl enable nginx
禁用开机自启动:systemctl disable nginx
启动nginx:systemctl start nginx
停止nginx:systemctl stop nginx
重启nginx:systemctl restart nginx
nginx范例
worker_processes auto;
worker_rlimit_nofile 20960;
error_log logs/error.log crit;
events {
worker_connections 4096;
multi_accept on;
accept_mutex on;
accept_mutex_delay 500ms;
}
http {
server_tokens off;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
access_log off;
include mime.types;
default_type application/octet-stream;
keepalive_timeout 300;
client_max_body_size 10240M;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_comp_level 3;
gzip_types text/xml text/plain text/css text/javascript application/x-javascript application/javascript application/xml application/json;
gzip_disable "MSIE [1-6]\.";
upstream app_server{
sticky;
server 13.11.101.11:80 max_fails=300 fail_timeout=30s;
server 13.11.101.12:80 max_fails=300 fail_timeout=30s;
}
# http配置
server {
listen 80;
server_name 13.11.103.13;
charset utf-8;
location / {
proxy_pass http://app_server;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_redirect off;
proxy_connect_timeout 300;
proxy_read_timeout 300;
proxy_send_timeout 300;
proxy_buffer_size 2048k;
proxy_buffers 32 2048k;
proxy_busy_buffers_size 2048k;
proxy_max_temp_file_size 1024m;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
# https配置
server {
listen 443 ssl;
ssl_certificate "/apps/nginx/ssl/app_server.crt";
ssl_certificate_key "/apps/nginx/ssl/app_server.key";
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_session_cache shared:SSL:5m;
ssl_session_timeout 5m;
ssl_prefer_server_ciphers on;
server_name 13.11.103.13;
charset utf-8;
location / {
proxy_pass http://app_server;
absolute_redirect off;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_redirect off;
proxy_connect_timeout 300;
proxy_read_timeout 300;
proxy_send_timeout 300;
proxy_buffers 32 2048k;
proxy_busy_buffers_size 2048k;
proxy_max_temp_file_size 1024m;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}