佛山网站建设佛山网络推广seo哪家公司好
一、Nginx简介
 1、Nginx简介
 Nginx(特点:占用内存少,并发能力强)
Nginx是一个高性能的 HTTP 和反向代理服务器。
 Nginx是一款轻量级的 Web 服务器/反向代理服务器及电子邮件
 单台物理服务器可支持30 000~50 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、poll:select加强版取消了1024最大连接数。
poll本质上和select没有区别,它将用户传入的数组拷贝到内核空间,然后查询每个fd对应的设备状态, 但是它没有最大连接数的限制,原因是它是基于链表来存储的。
3、epoll:poll的加强版。
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的安装路径
 --user=nginx \                   #指定用户名
 --group=nginx \                  #指定组名
 --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]
 Description=nginx
 After=network.target
 [Service]
 Type=forking
 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
 PrivateTmp=true
 [Install]
 WantedBy=multi-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
 [root@localhost conf]# mkdir -p /var/www/{abc,123}
 [root@localhost conf]# cd /var/www/
 [root@localhost www]# ls
 123  abc
 [root@localhost www]# echo 'this is 123 test web!' > 123/index.html
 [root@localhost 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模块
 [root@localhost ~]# /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 --user=nginx --group=nginx --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
 五、基于授权的访问控制
 [root@localhost ~]# yum install -y httpd-tools
 1
 #生成用户密码认证文件
 [root@localhost ~]# 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
 [root@localhost ~]# cd /usr/local/nginx/
 [root@localhost nginx]# cat passwd.db 
 [root@localhost nginx]# htpasswd ./passwd.db lisi
 [root@localhost nginx]# cat passwd.db 
 [root@localhost nginx]# pwd
 1
 2
 3
 4
 5
 #降低权限
 [root@localhost nginx]# chown nginx passwd.db 
 [root@localhost 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
 [root@localhost nginx]# nginx -t #检查语法格式
 [root@localhost 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
