企业网站建设的四大因素,电子商务网站建设与维护实训,做网站商城项目的流程,企业网站无锡一、Nginx简介 1、Nginx简介 Nginx#xff08;特点#xff1a;占用内存少#xff0c;并发能力强#xff09;
Nginx是一个高性能的 HTTP 和反向代理服务器。 Nginx是一款轻量级的 Web 服务器/反向代理服务器及电子邮件 单台物理服务器可支持30 000#xff5e;50 000个并发…一、Nginx简介 1、Nginx简介 Nginx特点占用内存少并发能力强
Nginx是一个高性能的 HTTP 和反向代理服务器。 Nginx是一款轻量级的 Web 服务器/反向代理服务器及电子邮件 单台物理服务器可支持30 00050 000个并发请求。
Tengine
Tengine 是由淘宝网发起的 Web 服务器项目。它在 Nginx 的基础上针对大访问量网站的需求添加了很多高级功能和特性。Tengine 的性能和稳定性已经在大型的网站如淘宝网、天猫商城等得到了很好的检验。可以这样理解淘宝网拿到了 Nginx 源代码之后进行了功能的填充、优化等等然后提交给 Nginx 官方但是由于 Nginx 官方相应慢甚至不响应加上语言沟通的不顺畅于是淘宝公司就自己打包在遵循 GPL 的原则上进行二次开发于是就出了现在的 Tengine 这个版本
注NG并发连接能力受2个因素影响
1、CPU个数 2、本地物理服务器系统的最大文件数
Apache Apache是以进程为基础的结构进程要比线程消耗更多的系统开支不太适用于多处理器环境因此在一个apache Web站点扩容时通常是增加服务器或扩充群集节点而不是增加处理器。
2、I/O模型相关概念 Nginx服务使用异步非阻塞模式请求不需要排队会反馈任务的完成结果。 Apache服务使用同步阻塞模式请求需要排队且不会主动返回结果。 同步/异步关注的是消息通信机制即调用者在等待一件事情的处理结果时。被调用者是否提供完成。 同步调用者需要主动询问结果。 异步调用者不需要主动询问结果被调用者会主动返回结果。 阻塞系统同时只能处理1个请求另外的请求需要排队。 非阻塞系统同时处理多个请求。 3、Nginx事件驱动模型 1、select一个应用程序代理系统功能处理异步请求最大连接数是1024个。
它仅仅知道了有I/O事件发生了却并不知道是哪那几个流可能有一个多个甚至全部我们只能无差别轮询所有流找出能读出数据或者写入数据的流对他们进行操作。所以select具有O(n)的无差别轮询复杂度同时处理的流越多无差别轮询时间就越长。
2、pollselect加强版取消了1024最大连接数。
poll本质上和select没有区别它将用户传入的数组拷贝到内核空间然后查询每个fd对应的设备状态 但是它没有最大连接数的限制原因是它是基于链表来存储的。
3、epollpoll的加强版。
epoll可以理解为event poll不同于忙轮询和无差别轮询epoll会把哪个流发生了怎样的I/O事件通知我们。所以我们说epoll实际上是事件驱动每个事件关联上fd的此时我们对这些流的操作都是有意义的。
4、Nginx和Apache的区别 1、Nginx是一个甚于事件的Web服务器 Apache是一个基于流程的服务器 2、Nginx所有请求都由一个线程处理 Apache单个线程处理单个请求 3、Nginx避免子进程的概念 Apache是基于子进程的 4、Nginx在内存消耗和连接方面更好 Apache在内存消耗和连接方面一般 5、Nginx的性能和可伸缩性不依赖于硬件 Apache依赖于CPU和内存等硬件 6、Nginx支持热部署 Apache不支持热部署 7、Nginx对于静态文件处理具有更高的效率Apache相对一般 8、Nginx在反向代理场景具有明显优势 Apache相对一般
一般来说需要性能的web服务用nginx。若不需要性能只求稳定就选用apache。
二、编译安装Nginx服务 1.关闭防火墙将安装的Nginx软件包安装到opt目录下 systemctl stop firewalld systemctl disable firewalld #关闭防火墙 yum -y install pcre-devel zlib-devel gcc gcc-c make #安装依赖包 1 2 3 2、编译安装Nginx cd /opt/ tar zxvf nginx-1.22.2.tar.gz cd nginx-1.22.0/ 1 2 3 ./configure \ --prefix/usr/local/nginx \ #指定Nginx的安装路径 --usernginx \ #指定用户名 --groupnginx \ #指定组名 --with-http_stub_status_module #启动http_stub_status_module模块支持状态统计 1 2 3 4 5 make -j2 make install 1 3、创建用户、组以便于更好的管理 Nginx 服务程序默认以 nobody 身份运行建议为其创建专门的用户账号以便更准确地控制其访问权限Nginx服务程序默认以匿名运行
useradd -M -s /sbin/nologin nginx 1 4、创建软连接并启动 #创建软连接让系统识别Nginx命令 ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ #检查文件是否正确 nginx -t nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful #启动nginx nginx #查看是否启动nginx netstat -antulp | grep nginx tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 5964/nginx: master
#如果遇到占用80端口的情况我们可以先查看pid号 cat /usr/local/nginx/logs/nginx.pid netstat -antulp | grep nginx
#在用kill -3命令暂停 kill -3 5964
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 5、停止Nginx #首先查看nginx的PID号 cat /usr/local/nginx/logs/nginx.pid netstat -antulp | grep nginx
#停止nginx kill -3 5964 netstat -antulp|grep nginx #这时候就查不到进程号了
6、添加Nginx系统服务 vim /lib/systemd/system/nginx.service [Unit] Descriptionnginx Afternetwork.target [Service] Typeforking PIDFile/usr/local/nginx/logs/nginx.pid ExecStart/usr/local/nginx/sbin/nginx ExecReload/bin/kill -s HUP $MAINPID ExecStop/bin/kill -s QUIT $MAINPID PrivateTmptrue [Install] WantedBymulti-user.target #赋予权限并启动服务 chmod 754 /lib/systemd/system/nginx.service systemctl start nginx.service
#再次查看80端口 lsof -i:80 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME nginx 6032 root 6u IPv4 35351 0t0 TCP *:http (LISTEN) nginx 6033 nginx 6u IPv4 35351 0t0 TCP *:http (LISTEN)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 nginx -v #查看nginx版本信息 nginx version: nginx/1.22.0 1 2 7、Nginx配置文件 Nginx主配置文件 全局块配置影响nginx全局的指令。一般有运行nginx服务器的用户组nginx进程pid存放路径日志存放路径配置文件引入允许生成worker process数等。
events块配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数选取哪种事件驱动模型处理连接请求是否允许同时接受多个网路连接,开启多个网络连接序列化等。
http块可以嵌套多个server配置代理缓存日志定义等绝大多数功能和第三方模块的配置。如文件引入mime-type定义日志自定义是否使用sendfile传输文件连接超时时间单连接请求数等。
server块配置虚拟主机的相关参数一个http中可以有多个server。
location块配置请求的路由以及各种页面的处理情况。
vim /usr/local/nginx/conf/nginx.conf #nginx.conf是主配置文件 1 nginx.conf详解 worker_processes 1; #全局配置本机可运行多少个master进程根据本机cpu数量设置数量可设置为auto按cpu核数自动化调整 events { #events事件处理模块 worker_connections 1024; #每个worker子进程可以处理多少个请求即可以打开多少个文件 } http { #http模块web服务器与网页有关配置写在此模块中 include mime.types; #mime.type中规定了那些文件是给用户查看的若文件类型不在此文件中则是下载文件。 default_type application/octet-stream; #默认支持文件类型 sendfile on; #开启文件传输 keepalive_timeout 65; #长连接超时时间单位为秒 server { #http模块中的server模块主要配置监听端口虚拟主机dns域名等 listen 80; #监听所有ip的80端口 server_name localhost; #主机名为本机可虚拟域名 location / { #http模块下的location模块 root html; #此location的根目录位置 index index.html index.htm; #配置默认寻找文件先寻找index.html若无此文件则找index.htm } error_page 500 502 503 504 /50x.html; #500、502等错误界面跳转访问指定的/下的50x.html页面 location /50x.html { #定义此location为精确匹配必须是50x.html才能访问此页面 root html; } } }
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 [rootlocalhost conf]# mkdir -p /var/www/{abc,123} [rootlocalhost conf]# cd /var/www/ [rootlocalhost www]# ls 123 abc [rootlocalhost www]# echo this is 123 test web! 123/index.html [rootlocalhost www]# echo this is abc test web! abc/index.html
1 2 3 4 5 6 7 vim /usr/local/nginx/conf/nginx.conf #增加location模块 location /abc { root /var/www; index index.html; } location /123 { root /var/www; index index.html; } 1 2 3 4 5 6 7 8 9 10 11 systemctl reload nginx #改完重新读取 nginx.conf 主配置 1 8、打开浏览器测试
四、访问状态统计配置 修改 nginx.conf 配置文件指定访问位置并添加 stub_status配置
#先使用命令/usr/local/nginx/sbin/nginx -V 查看已安装的Nginx是否包含HTTP_STUB_STATUS模块 [rootlocalhost ~]# /usr/local/nginx/sbin/nginx -V nginx version: nginx/1.22.0 built by gcc 4.8.5 20150623 (Red Hat 4.8.5-16) (GCC) configure arguments: --prefix/usr/local/nginx --usernginx --groupnginx --with-http_stub_status_module 1 2 3 4 5 cat /opt/nginx-1.22.0/auto/options | grep YES #可查看 nginx 已安装的所有模块 1 vim /usr/local/nginx/conf/nginx.conf #添加STUB_STATUS模块 location /state { #访问位置为/status stub_status on; #打开状态统计功能 access_log off; #关闭此位置的日志记录 } 1 2 3 4 5 6 写一个监控并发数的脚本 #/bin/bash
while true do count$(curl -Ls 192.168.154.10/state | grep Active connections | awk {print $3}) if [ $count -ge 1 ];then echo 警告当前并发负载过高并发数为$count fi sleep 2 #每两秒警告一次 done 1 2 3 4 5 6 7 8 9 10 五、基于授权的访问控制 [rootlocalhost ~]# yum install -y httpd-tools 1 #生成用户密码认证文件 [rootlocalhost ~]# htpasswd -c /usr/local/nginx/passwd.db zhangsan New password: #密码123456 Re-type new password: #确认密码123456 Adding password for user zhangsan 1 2 3 4 5 [rootlocalhost ~]# cd /usr/local/nginx/ [rootlocalhost nginx]# cat passwd.db [rootlocalhost nginx]# htpasswd ./passwd.db lisi [rootlocalhost nginx]# cat passwd.db [rootlocalhost nginx]# pwd 1 2 3 4 5 #降低权限 [rootlocalhost nginx]# chown nginx passwd.db [rootlocalhost nginx]# chmod 400 passwd.db 1 2 3 vim /usr/local/nginx/conf/nginx.conf #更改配置文件 location /abc { root /var/www; index index.html; auth_basic Hello sir; auth_basic_user_file /usr/local/nginx/passwd.db; }
1 2 3 4 5 6 7 8 [rootlocalhost nginx]# nginx -t #检查语法格式 [rootlocalhost nginx]# systemctl restart nginx 1 2
六、基于客户端的访问控制 访问控制规则如下 deny IP/IP 段拒绝某个 IP 或 IP 段的客户端访问。 allow IP/IP段允许某个 IP 或 IP 段的客户端访问。 规则从上往下执行如匹配则停止不再往下匹配。
vim /usr/local/nginx/conf/nginx.conf 1 location /state { stub_status on; access_log off; allow 127.0.0.1; #允许本机访问 allow 192.168.154.11; #允许192.168.154.11的主机访问 deny all; #禁止其它主机访问 } 1 2 3 4 5 6 7 systemctl restart nginx 1 使用IP地址为 192.168.154.11 的虚拟机测试成功
使用IP地址为 192.168.154.12 的虚拟机测试失败403被加入黑名单
七、基于域名的Nginx虚拟主机 为虚拟主机准备网页文档 修改Nginx的配置文件 vim /usr/local/nginx/conf/nginx.conf 1 server { listen 80; server_name www.accp.com; charset utf-8; access_log logs/accp.com-access.log; location / { root /var/www/abc; index index.html index.htm; } 1 2 3 4 5 6 7 8 9 10 11 12 :35,55 co 80 #复制完修改后在末尾加个大括号 在Windows 系统测试 在Linux 系统下测试
八、基于IP地址的Nginx 虚拟主机 vim /usr/local/nginx/conf/nginx.conf #修改配置文件 1
九、基于端口的Nginx 虚拟主机 vim /usr/local/nginx/conf/nginx.conf #修改配置文件 1
SSH 日志检查(secure) cd /var/log/ vim secure #ssh的连接信息 1 2
———————————————— 版权声明本文为CSDN博主「橘淮南枳」的原创文章遵循CC 4.0 BY-SA版权协议转载请附上原文出处链接及本声明。 原文链接https://blog.csdn.net/ll945608651/article/details/130135480