服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

云服务器|WEB服务器|FTP服务器|邮件服务器|虚拟主机|服务器安全|DNS服务器|服务器知识|Nginx|IIS|Tomcat|

服务器之家 - 服务器技术 - Nginx - nginx编译安装及常用参数详解

nginx编译安装及常用参数详解

2023-01-13 19:57焱黎 Nginx

这篇文章主要介绍了nginx编译安装及常用参数详解,一种是基于ansible role实现编译安装nginx以及编译安装参数详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

1 基于ansible role实现编译安装nginx

利用ansible控制端10.0.0.8机器,在被控制端10.0.0.18上部署nginx

首先打通ansible控制端与被控制端的基于key验证

?
1
2
3
4
5
[root@ansible-rocky ~]$ ssh-copy-id 10.0.0.18
[root@ansible-rocky ~]$ ssh 10.0.0.18
Last login: Wed Jan 11 12:18:28 2023 from 10.0.0.8
[root@rocky8 ~]$ hostname -I
10.0.0.18

然后创建nginx项目目录实现基于role的部署任务

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
#nginx role项目目录总览
[root@ansible-rocky opt]$ tree /opt
/opt
├── hosts_nginx
├── nginx_role.yml
└── roles
    └── nginx
        ├── handlers
        │   └── main.yml
        ├── tasks
        │   └── main.yml
        └── templates
            ├── nginx.conf.j2
            └── nginx.service.j2
 
#task文件
[root@ansible-rocky roles]$ cat nginx/tasks/main.yml
- name: add group nginx
  group: name=nginx system=yes gid=80
 
- name: add user nginx
  user: name=nginx group=nginx uid=80 system=yes shell="/sbin/nologin" create_home=no
 
- name: install dependent package
  yum: name={{item}} state=latest
  loop:
    - gcc
    - make
    - pcre-devel
    - openssl-devel
    - zlib-devel
    - perl-ExtUtils-Embed
 
- name: get nginx source
  unarchive:
    src: "{{ url }}"
    dest: "/usr/local/src"
    remote_src: yes
 
- name: compile and install
  shell:
    cmd: "./configure --prefix={{install_dir}} --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --with-stream --with-stream_ssl_module --with-stream_realip_module && make && make install"
    chdir: "/usr/local/src/nginx-{{ version }}"
    creates: "{{install_dir}}/sbin/nginx"
 
- name: config file
  template:
    src: nginx.conf.j2
    dest: "{{install_dir}}/conf/nginx.conf"
    owner: nginx
    group: nginx
  notify: restart service
  tags:
    - config
 
- name: create directory
  file:
    path: "{{install_dir}}/conf/conf.d"
    state: directory
    owner: nginx
    group: nginx
 
- name: change install directory owner
  file:
    path: "{{install_dir}}"
    owner: nginx
    group: nginx
    recurse: yes
 
- name: copy service file
  template:
    src: nginx.service.j2
    dest: "/lib/systemd/system/nginx.service"
 
- name: check config
  shell:
    cmd: "{{install_dir}}/sbin/nginx -t"
  register: check_nginx_config
  changed_when:
    - check_nginx_config.stdout.find('successful')
    - false
 
- name: start service
  systemd:
    daemon_reload: yes
    name: nginx.service
    state: started
    enabled: yes
      
#创建handler文件
[root@ansible-rocky roles]$ cat nginx/handlers/main.yml
- name: restart service
  service:
    name: nginx
    state: restarted
 
#装备两个template文件
[root@ansible-rocky roles]$ cat nginx/templates/nginx.conf.j2
user nginx;
worker_processes  {{ ansible_processor_vcpus*2 }};
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    log_format  access_json '{"@timestamp":"$time_iso8601",'
        '"host":"$server_addr",'
        '"clientip":"$remote_addr",'
        '"size":$body_bytes_sent,'
        '"responsetime":$request_time,'
        '"upstreamtime":"$upstream_response_time",'
        '"upstreamhost":"$upstream_addr",'
        '"http_host":"$host",'
        '"uri":"$uri",'
        '"xff":"$http_x_forwarded_for",'
        '"referer":"$http_referer",'
        '"tcp_xff":"$proxy_protocol_addr",'
        '"http_user_agent":"$http_user_agent",'
        '"status":"$status"}';
    # logging                                                                                         
    access_log {{install_dir}}/logs/access-json.log access_json;
    error_log {{install_dir}}/logs/error.log warn;
 
    keepalive_timeout  65;
    include {{install_dir}}/conf/conf.d/*.conf;
}
[root@ansible-rocky roles]$ cat nginx/templates/nginx.service.j2
[Unit]
Description=The nginx HTTP and reverse proxy server
After=network.target remote-fs.target nss-lookup.target
 
[Service]
Type=forking
PIDFile={{install_dir}}/logs/nginx.pid
ExecStartPre=/bin/rm -f {{install_dir}}/logs/nginx.pid
ExecStartPre={{install_dir}}/sbin/nginx -t
ExecStart={{install_dir}}/sbin/nginx
ExecReload=/bin/kill -s HUP \$MAINPID
KillSignal=SIGQUIT
TimeoutStopSec=5
KillMode=process
PrivateTmp=true                                                                                       
LimitNOFILE=100000
 
[Install]
WantedBy=multi-user.target
 
#在hosts文件中定义wensrvs需要的变量
[root@ansible-rocky opt]$ cat hosts_nginx
[websrvs]
10.0.0.18
 
[websrvs:vars]
version="1.22.1"
url="http://nginx.org/download/nginx-{{ version }}.tar.gz"
install_dir="/apps/nginx"
 
 
#在playbook中调用角色
[root@ansible-rocky opt]$ cat nginx_role.yml
- hosts: websrvs
  remote_user: root
 
  roles:
    - nginx
    
#运行playbook
[root@ansible-rocky opt]$ ansible-playbook -i hosts_nginx nginx_role.yml
 
PLAY [websrvs] ****************************************************************************************
 
TASK [Gathering Facts] ********************************************************************************
ok: [10.0.0.18]
 
TASK [nginx : add group nginx] ************************************************************************
changed: [10.0.0.18]
 
TASK [nginx : add user nginx] *************************************************************************
changed: [10.0.0.18]
 
TASK [nginx : install dependent package] **************************************************************
changed: [10.0.0.18] => (item=gcc)
ok: [10.0.0.18] => (item=make)
changed: [10.0.0.18] => (item=pcre-devel)
changed: [10.0.0.18] => (item=openssl-devel)
ok: [10.0.0.18] => (item=zlib-devel)
changed: [10.0.0.18] => (item=perl-ExtUtils-Embed)
 
TASK [nginx : get nginx source] ***********************************************************************
changed: [10.0.0.18]
 
TASK [nginx : compile and install] ********************************************************************
changed: [10.0.0.18]
 
TASK [nginx : config file] ****************************************************************************
changed: [10.0.0.18]
 
TASK [nginx : create directory] ***********************************************************************
changed: [10.0.0.18]
 
TASK [nginx : change install directory owner] *********************************************************
changed: [10.0.0.18]
 
TASK [nginx : copy service file] **********************************************************************
changed: [10.0.0.18]
 
TASK [nginx : check config] ***************************************************************************
ok: [10.0.0.18]
 
TASK [nginx : start service] **************************************************************************
changed: [10.0.0.18]
 
RUNNING HANDLER [nginx : restart service] *************************************************************
changed: [10.0.0.18]
 
PLAY RECAP ********************************************************************************************
10.0.0.18                  : ok=13   changed=11   unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

在被控制端检查是否安装完成

nginx编译安装及常用参数详解

2 编译安装参数详解

编译安装参数示例:

?
1
2
3
4
5
6
7
8
9
10
11
12
./configure --prefix={{install_dir}} \
--user=nginx \
--group=nginx \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_realip_module \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--with-pcre \
--with-stream \
--with-stream_ssl_module \
--with-stream_realip_module

在编译安装参数中--with开头的选项默认是禁用的,想要使用的话就需要在编译的时候加上;without开头的选项默认是开启的,不想要启用此模块的话就需要在编译的时候加上。

通用配置选项参数:

选项 解释说明
--prefix=<path> Nginx安装的根路径,所有其它路径都要依赖该选项
--sbin-path=<path> 指定nginx二进制文件的路径,没指定的话 这个路径依赖<prefix>选项
--conf-path=<path> 命令行未指定配置文件,将会通过这里指定的路径加载配置文件
--error-log-path=<path> 写入错误日志文件地址,默认值:<prefix>/logs/error.log。安装后,可以使用 nginx.conf 中的 error_log 指令更改。
--pid-path=<path> nginx master进程pid写入的文件位置,默认值:<prefix>/logs/nginx.pid。安装后,可以使用 nginx.conf 中的 pid 指令更改。
--lock-path=<path> 共享存储器互斥锁文件路径
--user=<user> nginx 运行用户。默认值:nobody。安装后,可以使用 nginx.conf 中的 user 指令更改。
--group=<group> nginx 运行组。默认值:--user 指定的值。安装后,可以使用 nginx.conf 中的 user 指令更改。

默认开启的模块

选项 解释说明
--without-http_gzip_module 禁用 ngx_http_gzip_module 模块
--without-http_userid_module 禁用 ngx_http_userid_module 模块,该模块设置适用于客户端标识的 cookie
--without-http_access_module 禁用 ngx_http_access_module 模块,该模块允许限制对某些客户端地址的访问
--without-http_rewrite_module 禁用 URL 转发(rewrite)
--without-http_proxy_module 禁用 HTTP 服务器代理(proxy)模块
--without-http-cache 禁用 HTTP 缓存

默认未开启模块

选项 解释说明
--with-http_ssl_module 启用 HTTPS 协议支持,需要 OpenSSL 库。默认情况下未构建此模块
--with-http_v2_module 启用 HTTP/2 协议支持。默认情况下未构建此模块。
--with-http_realip_module 启用 ngx_http_realip_module 模块的功能,该模块将客户端地址更改为在指定的 "header " 字段中发送的地址。默认情况下未构建此模块
--with-http_sub_module 启用 ngx_http_sub_module 模块,该模块通过将一个指定的字符串替换为另一个指定的字符串来修改响应。默认情况下未构建此模块
--with-http_gzip_static_module 启用 ngx_http_gzip_static_module 模块,该模块支持发送扩展名为 “.gz” 的预压缩文件,而不是常规文件。默认情况下未构建此模块
--with-http_auth_request_module 启用 ngx_http_auth_request_module 模块,该模块基于子请求的结果实现客户端授权。默认情况下未构建此模块
--with-http_stub_status_module 启用 ngx_http_stub_status_module 模块,该模块提供对基本状态信息的访问。默认情况下未构建此模块
--add-module=path 启用外部模块
--add-dynamic-module=path 启用外部动态模块
--modules-path=path nginx 动态模块的目录。默认值:<prefix>/modules目录

perl模块相关选项参数

选项 解释说明
--without-pcre 禁用PCRE库
--with-pcre 强制使用PCRE库

邮件模块相关配置选项参数

选项 解释说明
--with-mail 激活POP3/IMAP4/SMTP代理模块,默认未激活
--with-mail_ssl_module 允许ngx_mail_ssl_module模块这个模块使得POP3/IMAP/SMTP可以使用SSL/TLS.配置已经定义了HTTP SSL模块,但是不支持客户端证书检测
--without-mail_pop3_module 启用mail模块后,单独禁用pop3模块
--without-mail_imap_module 启用mail模块后,单独禁用imap模块
--without-mail_smtp_module 启用mail模块后,单独禁用smtp模块
--without-http 完全禁用http模块,如果只想支持mall,可以使用此项设置
--with-openssl=DIR 设定OpenSSL库文件路径

stream模块相关参数

选项 解释说明
--with-stream 开启stream模块
--with-stream_ssl_module 启用 stream 模块的 SSL/TLS 协议支持。构建和运行此模块需要 OpenSSL 库。默认情况下未构建此模块
--with-stream_realip_module 启用 ngx_stream_realip_module 模块的功能,该模块将客户端地址更改为 PROXY 协议标头中发送的地址。默认情况下未构建此模块
--without-stream_access_module 禁用 ngx_stream_access_module 模块,该模块允许限制对某些客户端地址的访问

原文链接:https://www.cnblogs.com/yan-linux/archive/2023/01/11/17043491.html

延伸 · 阅读

精彩推荐
  • NginxNginx添加ipv6模块以及遇到问题解决方案详解(亲测有效)

    Nginx添加ipv6模块以及遇到问题解决方案详解(亲测有效)

    IPV4日益稀缺,ipv6已经慢慢走上日程,待ipv6在国内普及,使用nginx配置ipv6那是肯定的,下面这篇文章主要给大家介绍了关于Nginx添加ipv6模块以及遇到问题的解决方...

    刺-客11042022-11-08
  • NginxNginx tp3.2.3 404问题解决方案

    Nginx tp3.2.3 404问题解决方案

    这篇文章主要介绍了Nginx tp3.2.3 404问题解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...

    绝技小嗨皮11682021-02-28
  • Nginx浅谈nginx反向代理中神奇的斜线

    浅谈nginx反向代理中神奇的斜线

    这篇文章主要介绍了浅谈nginx反向代理中神奇的斜线,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 ...

    美味风蛇5492019-12-27
  • NginxNginx泛解析到子目录后自动判断有无public目录详解

    Nginx泛解析到子目录后自动判断有无public目录详解

    这篇文章主要给大家介绍了关于Nginx泛解析到子目录后自动判断有无public目录的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有...

    小李刀刀5402019-12-07
  • NginxNginx负载均衡详细介绍

    Nginx负载均衡详细介绍

    nginx不单可以作为强大的web服务器,也可以作为一个反向代理服务器,而且nginx还可以按照调度规则实现动态、静态页面的分离,可以按照轮询、ip哈希、...

    Nginx教程网5462019-11-14
  • NginxNginx端口映射配置方法

    Nginx端口映射配置方法

    这篇文章主要介绍了Nginx端口映射配置方法和多端口映射,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 ...

    lufeng5015472019-12-23
  • Nginxnginx部署vue项目,给访问路径加前缀的实现

    nginx部署vue项目,给访问路径加前缀的实现

    这篇文章主要介绍了nginx部署vue项目,给访问路径加前缀的实现方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐...

    你猜是不是我10202022-12-12
  • NginxNginx服务器中使用gzip压缩的相关配置解析

    Nginx服务器中使用gzip压缩的相关配置解析

    这篇文章主要介绍了Nginx服务器中使用gzip压缩的相关配置解析,包括对gzip请求处理相关的压缩配置,需要的朋友可以参考下 ...

    jevien2162019-11-05