一 nginx安装与配置
1 . nginx的源码编译安装
由于其源码包是开源的,源码编译安装相对于其他以及编译好的可执行代码具有较高的自定义性,可以在编译过程在根据自己的需求增加所需的功能模块。
下载nginx安装包,解压缩
nginx-1.20.1.tar.gz
[root@server1 ~]# tar zxf nginx-1.20.1.tar.gz ##解压源码包
[root@server1 ~]# cd nginx-1.20.1/
[root@server1 nginx-1.20.1]# ./configure --help ## 查看源码编译可带的参数模块
查看帮助文档,自定义自己想要的安装模块
[root@server1 nginx-1.20.1]# ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
--prefix=/usr/local/nginx ##指定安装路径
--with-http_stub_status_module ##监控nginx的整体访问情况
--with-http_ssl_module ##ssl模块,支持https
预编译报错,提示缺少c编译环境,按照提示安装gcc后再次编译
[root@server1 nginx-1.20.1]# yum install -y gcc
[root@server1 nginx-1.20.1]# ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
再次报错,提示缺少PCRE,根据提示安装pcre-devel后再进行编译。
[root@server1 nginx-1.20.1]# yum install -y pcre-devel
[root@server1 nginx-1.20.1]# ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
又一次报错,提示缺少openssl,根据报错提示安装openssl-devel
[root@server1 nginx-1.20.1]# yum install -y openssl-devel
[root@server1 nginx-1.20.1]# ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
预编译成功!可以看到同时生成了objs下的Makefile文件,里面记录了所有安装参数。
make从Makefile文件中读取指令,对源代码进行正式编译
[root@server1 nginx-1.20.1]# make ##编译
编译成功后查看obis文件生成了.o等可执行文件,再进行安装
[root@server1 nginx-1.20.1]# make install
[root@server1 nginx-1.20.1]# cd /usr/local/nginx/sbin/ ##在自定义安装路径下查看,
安装成功。执行./nginx
即可启动二进制程序
[root@server1 sbin]# ./nginx
在浏览器里也可成功访问。
| nginx解压出来的源码安装包下的文件的解释
2.ngingx优化
轻量化编译
安装好的 nginx二进制程序可以在自定义的安装路经下找到,查看程序大小,有5.8M,可以在编译时关闭gcc的debug模式,重新编译,减小编译时的性能开销,使得编译结果更加轻量化。
关掉gcc的debug模式
[root@server1 nginx-1.20.1]# vim auto/cc/
[root@server1 nginx-1.20.1]# pwd
/root/nginx-1.20.1
执行make clean清理第一次编译时的文件。
[root@server1 ~]# cd nginx-1.20.1/
[root@server1 nginx-1.20.1]# make clean
rm -rf Makefile objs
再关闭之前已经开启的nginx,否则二次编译后重启时回报错,提示端口已被占用。
/usr/local/nginx/sbin/nginx -s stop
重新预编译
[root@server1 nginx-1.20.1]# ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
编译
[root@server1 nginx-1.20.1]# make
此时查看与编译好的二进制应用程序只有944k,将其复制到安装目录下的nginx中,覆盖旧的程序
[root@server1 objs]# cp nginx /usr/local/nginx/sbin/nginx
隐藏版本号
当应用curl访问时,会直接给用户返回nginx的版本号,在生产环境中,也需要隐藏版本号,以避免安全漏洞的泄漏。我们可以通过修改源码文件安装来实现。
[root@server1 ~]# /usr/local/nginx/sbin/nginx -s stop
[root@server1 ~]# cd nginx-1.20.1/
[root@server1 nginx-1.20.1]# make clean
rm -rf Makefile objs
[root@server1 nginx-1.20.1]# vim src/core/nginx.h
重新编译,
[root@server1 nginx-1.20.1]# ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
[root@server1 nginx-1.20.1]# make
将编译好的nginx直接复制到安装路经下并覆盖,再次访问时版本号已经被隐藏。
[root@server1 nginx-1.20.1]# cp objs/nginx /usr/local/nginx/sbin/nginx
cp: overwrite ‘/usr/local/nginx/sbin/nginx’? y
[root@server1 nginx-1.20.1]# /usr/local/nginx/sbin/nginx
[root@server1 nginx-1.20.1]# curl --head http://172.25.1.1
nginx的全局命令
将二进制文件链接到系统命令内,可以不使用绝对路径启动nginx.
[root@server1 nginx-1.20.1]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
[root@server1 nginx-1.20.1]# which nginx
/usr/local/sbin/nginx
链接好后就可以全局使用nginx了,nginx -t
是nginx配置测试命令
使用systemctl命令来控制nginx
先关闭能nginx,在system内添加编写 nginx的控制文件
[root@server1 ~]# cd /usr/lib/systemd/system
[root@server1 system]# vim nginx.service
[root@server1 system]# cat nginx.service
[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
刷新
systemctl daemon-reload
设置开机自启
systemctl enable --now nginx
即可使用systemctl命令来控制nginx
shu