Nginx网络服务的配置

143 阅读6分钟

Nginx概述

Nginx是一款高性能、轻量级Web服务软件。稳定性高,系统资源消耗低,对HTTP开发连接的处理能力高,单台物理服务器理论上可支持 30 00050 000 个并发请求,实际约 23 万

Nginx相对于Apache的优点

  • 轻量化,Nginx 比 Apache占用更少的内存及资源;
  • 静态处理,Nginx 静态处理性能比 Apache 高;
  • Nginx可以实现无缓存的反向代理加速,提高网站运行速度;
  • Nginx的性能和可伸缩性不依赖于硬件,Apache依赖于硬件;
  • Nginx支持热部署,启动速度迅速,可以在不间断服务的情况下,对软件版本或者配置进行升级;
  • nginx是异步进程,多个连接可以对应一个进程;apache是同步多进程,一个连接对应一个进程;
  • Nginx高度模块化,编写模块相对简单,且组件比Apache少;
  • 高并发下Nginx 能保持低资源低消耗高性能;
  • Nginx 配置简洁,Apache配置复杂;

配置Nginx网络服务

需要准备Nginx源码包nginx-1.12.0.tar.gz

编译安装和启用Nginx服务

关闭防火墙和selinux

systemctl stop firewalld
systemctl disable firewalld
setenforce 0

安装依赖包

nginx的配置及运行需要pcre、zlib、openssl等软件包的支持,因此需要安装这些软件的开发包,以便提供相应的库和头文件

yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c++ make

创建运行用户、组(Nginx 服务程序默认以 nobody 身份运行,建议为其创建专门的用户账号,以便更准确地控制其访问权限)

useradd -M -s /sbin/nologin nginx

编译安装Nginx源码包

#在opt目录下解压源码包
cd /opt
tar zxf /tmp/VMwareDnD/npLsWu/nginx-1.12.0.tar.gz

#到源码包中自定义编译安装
cd nginx-1.12.0/
./configure \
--prefix=/usr/local/nginx \	#指定nginx的安装路径
--user=nginx \			#指定用户名
--group=nginx \			#指定组名
--with-http_stub_status_module	#启用 http_stub_status_module 模块以支持状态统计

#编译安装
make && make install

#让系统识别nginx的操作命令
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/

nginx服务的检查、启动、重启、停止、生成日志和升级

nginx -V        //查看版本和编译安装选项(-v 只查看版本号)

微信截图_20221019172147.png

nginx -t       //检查nginx配置文件的语法

微信截图_20221019172237.png

nginx        //开启nginx服务

微信截图_20221019172346.png

cat nginx.pid        //查看nginx进程pid号

微信截图_20221019172445.png

kill -3 pid号               //关闭nginx服务

kill -s QUIT pid号

微信截图_20221019172631.png

kill -1 pid号               //重载nginx服务

kill -s HUP pid号

微信截图_20221019173005.png

kill -USR1 pid号        //重新生成日志文件 (用于分割日志到系统日志文件目录下)

微信截图_20221019173821.png

kill -USR2 pid号        //平滑升级nginx版本 (需要提前编译好新版的安装包,然后能在服务不关闭的情况下升级)

微信截图_20221019174207.png

编译后查看

微信截图_20221019183851.png

微信截图_20221019183942.png

只需要替换原版安装的nginx文件即可完成升级(可先做备份)

微信截图_20221019184010.png

微信截图_20221019184530.png

注意点(不影响升级)

make upgrade过程中报的错是由于nginx不是通过/usr/local/nginx/sbin/nginx启动的,而是通过$PATH中的软连接启动的。

解决办法

要保证当前 nginx 进程是通过 /usr/local/nginx/sbin/nginx 启动的;或者先 killall nginx ,再使用 /usr/local/nginx/sbin/nginx 。

添加 nginx 系统服务(通过systemctl管理)

chkconfig:2345 20 90   #代表服务在2345启动级别中,第20个进程自启,第90个进程关闭。

chkconfig:-                  # 代表不开机自启

#编写服务配置文件
vim /etc/init.d/nginx
#!/bin/bash
#chkconfig: 2345 20 99
#description:Nginx Service Control Script
COM="/usr/local/nginx/sbin/nginx"
PID="/usr/local/nginx/logs/nginx.pid"
case "$1" in
start)
  $COM
;;

stop)
  kill -s QUIT $(cat $PID)
;;

restart)
  $0 stop
  $0 start
;;

reload)
  kill -s HUP $(cat $PID)
;;

*)
echo "Usage: $0 {start|stop|restart|reload}"
exit 1

esac
exit 0

#添加到系统服务
chmod +x /etc/init.d/nginx
chkconfig --add nginx
systemctl stop nginx
systemctl start nginx

微信截图_20221019185106.png

修改Nginx主配置文件

nginx 主配置文件 /usr/local/nginx/conf/nginx.conf

微信截图_20221019185317.png

所有配置字段块的作用

微信截图_20221019185347.png (1)修改全局配置

微信截图_20221019185429.png

Nginx的两种进程

  • 主进程(master process),用于管理工作进程。
  • 工作进程(work process),用于处理用户的连接(一般设置数与cpu总线程数一致)。

微信截图_20221019185523.png

修改为与本机cpu数一致

微信截图_20221019185559.png

将work进程与特定物理cpu核心绑定(避免切换核心,提高性能)

微信截图_20221019185634.png

双核设为 worker_cpu_affinity 01 10;

(2)添加 I/O事件配置

微信截图_20221019185717.png 默认只有一行配置,添加use epoll; 表示使用epoll I/O模型,可以提高性能

(2.6及以上版本的系统内核,建议使用epoll模型)

微信截图_20221019185805.png

  • 在Linux平台上,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制(这是因为系统为每个TCP连接都要创建一个socket句柄,每个socket句柄同时也是一个文件句柄)。

  • epoll是Linux内核为处理大批句柄而作改进的poll,是Linux下多路复用IO接口select/poll的增强版本,它能显著的减少程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。

    由于一个nginx服务器最大可以支持2~3万连接数,我们需要根据本机工作进程数修改
    每个进程支持的连接数(如我本机设置为8,约可修改为3500)
    
    如提高每个进程的连接数还需执行“ulimit -n 65535”命令临时修改本地每个进程可
    以同时打开的最大文件数(永久修改需要修改/etc/security/limits.conf 文件)。
    
    可使用ulimit -a命令查看系统允许当前用户进程打开的文件数限制。
    

微信截图_20221019190140.png

临时修改

微信截图_20221019190212.png

永久修改

修改/etc/security/limits.conf文件,添加如下字段

注意

  • 软限制soft 和硬限制hard 必须都添加才能生效
  • 软限制值 <= 硬限制值
  • 重启系统后生效!!!

微信截图_20221019193111.png

重启后查看

微信截图_20221019193148.png

(3)HTTP配置

微信截图_20221019193232.png

日志格式设定

微信截图_20221019193302.png

 其中的server字段代表站点web服务配置 (有几个站点就有几个server字段)

微信截图_20221019195541.png

微信截图_20221019195606.png

微信截图_20221019195628.png

location常见配置指令:root、alias、proxy_pass

root(根路径配置)root 后加路径,代表指定网页根路径,默认值是html(相对路径,代表/usr/local/nginx/html),location 后的 / ,代表root指定路径的根。

例:location /test , root /var/www/html , 代表访问指定根路径/var/www/html 下的 /test 中的页面 。

alias(别名配置)在location 指定路径的字段定义别名,之后访问指定路径,就是别名指定的路径。

例: location /test ,alisa /var/www/html ,访问服务器地址下的 /test 目录 ,指向的是/var/www/html 中的页面。

proxy_pass(反向代理配置)

Nginx虚拟主机配置

1.基于域名

(1)为虚拟主机提供域名解析

  • 配置DNS
  • 修改/etc/hosts文件

微信截图_20221019195930.png

(2)为虚拟主机准备网页文档

#创建网页目录
mkdir -p /var/www/html/abc
mkdir -p /var/www/html/def

#编写简易首页html文件
echo "<h1>welcome to www.abc.com</h1>" > /var/www/html/abc/index.html
echo "<h1>welcome to www.def.com</h1>" > /var/www/html/def/index.html

(3)修改nginx配置文件

微信截图_20221019200116.png

微信截图_20221019200137.png

微信截图_20221019200158.png

(4)检查语法并重启,访问测试

微信截图_20221019200324.png

微信截图_20221019200345.png

微信截图_20221019200353.png

2.基于IP

(1)添加网络接口

微信截图_20221019200511.png

(2)修改nginx配置文件

微信截图_20221019200549.png

微信截图_20221019200613.png

(3)检查语法并重启,访问测试

微信截图_20221019200727.png

微信截图_20221019200747.png

微信截图_20221019200757.png

基于端口

(1)修改配置文件中监听端口

微信截图_20221019201142.png

微信截图_20221019201224.png

(2)检查语法并重启,访问测试

微信截图_20221019201255.png

微信截图_20221019201357.png

微信截图_20221019201410.png

四、Nginx访问状态统计

cat /opt/nginx-1.12.0/auto/options       //可查看安装软件的所有模块(YES表示已安装)

1.先查看已安装的Nginx是否包含 HTTP_STUB_STATUS 模块

微信截图_20221022124620.png

2.修改 nginx.conf 配置文件,指定访问位置并添加 stub_status 配置

先恢复默认配置,再修改nginx.conf

微信截图_20221022124724.png

微信截图_20221022124754.png

3.检查配置并重启服务,测试访问

微信截图_20221022124845.png

微信截图_20221022124903.png

微信截图_20221022124929.png

微信截图_20221022125033.png

可使用 curl -Ls http://192.168.80.10/status 模拟访问页面并输出,结合 awk与 if 语句进行性能监控。

//模拟访问并输出
[root@localhost1 conf]#curl -Ls http://192.168.116.10/status
Active connections: 1
server accepts handled requests
 3 3 5
Reading: 0 Writing: 1 Waiting: 0

//获取活动连接数
[root@localhost1 conf]#curl -Ls http://192.168.116.10/status | awk '/Active/ {print $3}'    
1

五、Nginx配置访问控制

1.基于授权的访问控制

(1)下载依赖软件,生成用户密码认证文件,修改密码文件权限

微信截图_20221022125427.png

微信截图_20221022125506.png

微信截图_20221022125527.png

(2)修改主配置文件对应目录,添加认证配置项

微信截图_20221022125558.png

(3)检查配置并重启服务,测试访问

微信截图_20221022125626.png

微信截图_20221022125643.png

微信截图_20221022125707.png

微信截图_20221022125726.png

2.基于客户端的访问控制

- deny IP/IP 段:拒绝某个 IP 或 IP端的客户端访问。  
- allow IP/IP 段:允许某个 IP 或 IP端端客户端访问。  
- 规则从上往下执行,如匹配则停止,不再往下匹配。

(1)修改配置文件,允许以下两个地址访问,拒绝其他

微信截图_20221022125922.png

(2)检查配置并重启服务,测试访问

微信截图_20221022125947.png

微信截图_20221022130004.png

微信截图_20221022130034.png