Nginx网站服务【☆☆☆】

市面上常用Linux的web服务器:apache、Nginx。

apache与nginx的区别?

  1. 最核心的区别在于NGINX采用异步非阻塞机制,多个连接可以对应一个进程;apache采用的是同步阻塞多进程/线程模型,一个连接对应一个进程。
  2. apache美国公司开发的;nginx是俄罗斯公司开发的;
  3. Nginx抗并发性能更高;
  4. Nginx更轻量,内存CPU资源消耗更少;
  5. Nginx配置简洁,使用场景多,稳定性高;
  6. Nginx处理静态页面性能最好,nginx本身没有动态页面处理能力(可以通过反向代理做负载均衡实现动态页面)
  7. apache的模块更丰富,更稳定,bug少(但好的有限)。

nginx的应用场景

  1. 用作web网站服务,处理http静态页面请求;
  2. 用作虚拟主机,实现一个服务器用于做多个网站站点; 
  3. 用作反向代理、负载均衡,可以作为网关代理服务器接收客户端的请求转发给后端节点服务器集群

---------------------------------------------------------------------------------------------------------------------------

一、Nginx服务安装

1.初始化操作,(防火墙在生产环境中需要开启一些必要端口),安装编译依赖包,下载软件包

nginx: download,一般用的是stable version稳定版本 

[root@pyx ~]# setenforce 0
setenforce: SELinux is disabled
[root@pyx ~]# systemctl stop firewalld
[root@pyx ~]# cd /opt
[root@pyx opt]# ls
rh
[root@pyx opt]# rm -rf *
[root@pyx opt]# rz -E                      #上传NGINX软件包
[root@pyx opt]# tar zvxf nginx-1.12.0.tar.gz
[root@pyx opt]# ls
nginx-1.12.0  nginx-1.12.0.tar.gz
[root@pyx opt]# yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c++ make
[root@pyx opt]# useradd -M -s /sbin/nologin nginx

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

  --help                             print this message

  --prefix=PATH                set installation prefix指定安装路径
  --sbin-path=PATH          set nginx binary pathname指定二进制文件存放路径
  --modules-path=PATH   set modules path模块文件存放路径
  --conf-path=PATH          set nginx.conf pathname配置文件存放路径
  --error-log-path=PATH   set error log pathname错误日志
  --pid-path=PATH            set nginx.pid pathname   pid文件
  --lock-path=PATH           set nginx.lock pathname锁定文件

  --user=USER                  set non-privileged user for    指定运行用户
                                      worker processes
  --group=GROUP            set non-privileged group for   指定组用户
                                       worker processes

  --build=NAME                 set build name
  --builddir=DIR                 set build directory

--with开启模块,--without关闭模块

[root@pyx opt]# cd nginx-1.12.0/
[root@pyx nginx-1.12.0]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with-http_ssl_module
#--prefix=/usr/local/nginx       指定安装路径    
#--user=nginx                    指定运行用户
#--group=nginx                   指定组用户
#-with-http_stub_status_module   开启状态统计模块
#--with-http_ssl_module          开启ssl-http模块,网站用到http协议必须要有的模块
[root@pyx opt]# make -j 2
[root@pyx nginx-1.12.0]# make install
[root@pyx nginx-1.12.0]# cd /usr/local/
[root@pyx local]# ls
bin  etc  games  include  lib  lib64  libexec  nginx  sbin  share  src
[root@pyx local]# cd nginx/
[root@pyx nginx]# ls
conf  html  logs  sbin
[root@pyx nginx]# ls sbin
nginx
[root@pyx nginx]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/   #放到环境变量目录中
[root@pyx nginx]# ng(tab补全,就能看大nginx软件了)
ngettext  nginx  

 (yum在线源安装的话配置如下)

3.启动、关闭、重载 、重新生成日志文件、升级nginx程序

①启动

#开启NGINX
[root@pyx nginx]# netstat -lntp | grep :80        #确保没有开启apache,否则会端口冲突
[root@pyx nginx]# /usr/local/nginx/sbin/nginx 
[root@pyx nginx]# netstat -lntp | grep :80
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      14440/nginx: master 
[root@pyx nginx]# ls logs/
access.log  error.log  nginx.pid                  #开启nginx后会在logs目录中生成它的pid文件    
[root@pyx nginx]# cat logs/nginx.pid 
14440                                             #与之前查看的进程号是一致的

 ②关闭

#关闭NGINX
kill -3 pid号      或  kill -s QUIT pid号        kill -3杀进程同时会发送堆栈信息
killall -3 nginx   或  killall -s QUIT nginx
或者nginx -s 信号种类(stop/quit/reopen/reload)管理进程
-------------------------------------------------------------------------------------------
[root@pyx ~]# nginx -s quit
[root@pyx ~]# netstat -lntp | grep :80

 ③重载

#重载nginx
kill -1 <PID号>
kill -s HUP <PID号>
killall -1 nginx
killall -s HUP nginx  重载
nginx -s reload

④重新生成日志文件 

#重建nginx日志,日志分割,重新打开日志文件
kill -USR1 <PID号>
-------------------------------------------------------------------------------------
[root@pyx nginx]# cd logs/
[root@pyx logs]# ls
access.log  error.log  nginx.pid
[root@pyx logs]# rm -f *.log
[root@pyx logs]# ls
nginx.pid
[root@pyx logs]# kill -USR1 $(cat nginx.pid)    #获取PID号
[root@pyx logs]# ls
access.log  error.log  nginx.pid

 ⑤平滑升级nginx

先从官网下载最新的软件包,上传到nginx服务器中进行解压,到软件包目录里./configuer按照原有的配置进行配置(时间长忘了的话可以nginx -V查看),make编译。然后把生成的位于/objs/中的二进制文件复制替换掉/usr/local/nginx/sbin中原来的程序,用make upgrade平滑升级。

#平滑升级
[root@pyx logs]# cd /opt/
[root@pyx opt]# ls
nginx-1.12.0  nginx-1.12.0.tar.gz
[root@pyx opt]# rz -E
[root@pyx opt]# ls
nginx-1.12.0  nginx-1.12.0.tar.gz  nginx-1.26.0.tar.gz
[root@pyx opt]# tar xf nginx-1.26.0.tar.gz 
[root@pyx opt]# ls
nginx-1.12.0  nginx-1.12.0.tar.gz  nginx-1.26.0  nginx-1.26.0.tar.gz
[root@pyx opt]# cd nginx-1.26.0/
[root@pyx nginx-1.26.0]# ls
auto  CHANGES  CHANGES.ru  conf  configure  contrib  html  LICENSE  man  README  src
[root@pyx nginx-1.26.0]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with-http_ssl_module
[root@pyx nginx-1.26.0]# ls
auto     CHANGES.ru  configure  html     Makefile  objs    src
CHANGES  conf        contrib    LICENSE  man       README
[root@pyx nginx-1.26.0]# make -j 2        #编译生成二进制文件
[root@pyx nginx-1.26.0]# ls
auto     CHANGES.ru  configure  html     Makefile  objs    src
CHANGES  conf        contrib    LICENSE  man       README
[root@pyx nginx-1.26.0]# cd objs/        #二进制文件存放在objs中
[root@pyx objs]# ls
autoconf.err  nginx    ngx_auto_config.h   ngx_modules.c  src
Makefile      nginx.8  ngx_auto_headers.h  ngx_modules.o
[root@pyx objs]# mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx_old   
#把nginx-1.12.0的程序文件名名改一下
[root@pyx objs]# cp nginx /usr/local/nginx/sbin/        #把新的nginx程序文件复制过来
[root@pyx objs]# cd /usr/local/nginx/sbin/
[root@pyx sbin]# ls
nginx  nginx_old
[root@pyx sbin]# cd /opt/nginx-1.26.0/                  #回到新版的安装包目录
[root@pyx nginx-1.26.0]# ls
auto     CHANGES.ru  configure  html     Makefile  objs    src
CHANGES  conf        contrib    LICENSE  man       README
[root@pyx nginx-1.26.0]# make upgrade                   #更新
#要保证当前 nginx 进程是通过 /usr/local/nginx/sbin/nginx 启动的,而不是通过查找环境变量中那个 nginx 命令启动的
/usr/local/nginx/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
kill -USR2 `cat /usr/local/nginx/logs/nginx.pid`
sleep 1
test -f /usr/local/nginx/logs/nginx.pid.oldbin
kill -QUIT `cat /usr/local/nginx/logs/nginx.pid.oldbin`  
#能看到上面也是用kill -USR2 `cat /usr/local/nginx/logs/nginx.pid`获取进程号的。
#要保证当前 nginx 进程是通过 /usr/local/nginx/sbin/nginx 启动的,而不是通过查找环境变量中那个 nginx 命令启动的
[root@pyx nginx-1.26.0]# nginx -v
nginx version: nginx/1.26.0                             #获取nginx的版本
---------------------------------------------------------------------------------------
此处注意,我旧版是1.12,新版是1.26,在添加systemctl管理时报错,这里后面重新做个软链接就可以正常使用了。
[root@pyx nginx-1.26.0]# rm -f /usr/local/sbin/nginx
[root@pyx nginx-1.26.0]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin

 4.添加nginx系统服务,实现使用systemctl来管理nginx

准备一个.service为结尾的文件
[Unit]: 设置nginx服务的说明、描述、依赖
Description:描述服务
After:依赖,当依赖的服务启动之后再启动自定义的服务,nginx要在network之后运行
[Service]服务运行参数的设置
Type=forking表示后台启动
ExecStart指定nginx的启动路径(绝对路径)
ExecReload为重载nginx服务,$MAINPID是system的一个变量,可以通过PID文件获取nginx主进程的pid号                
ExecStop为停止命令
PrivateTmp=True表示给服务分配独立的临时空间
注意:启动、重启、停止命令全部要求使用绝对路径
[Install]服务安装的相关设置,在什么级别去运行,可设置为多用户

方法一:
#先写nginx脚本文件
vim /etc/init.d/nginx
#!/bin/bash
#chkconfig: - 99 20           #设置nginx服务开启自启,-表示关闭服务开机自启,2345表示运行级别2、3、4、5,第99个启动第20个关闭
#description:Nginx Service Control Script
COM="/usr/local/nginx/sbin/nginx"         变量COM获取nginx的运行路径
PID="/usr/local/nginx/logs/nginx.pid"     变量PID获取nginx的PID文件路径
case "$1" in
start)$COM
;;stop)kill -s QUIT $(cat $PID)
;;restart)$0 stop		$0表示脚本本身,关闭nginx$0 start		$0表示脚本本身,启动nginx,从而达到重启的效果
;;reload)kill -s HUP $(cat $PID)
;;*)
echo "Usage: $0 {start|stop|restart|reload}"
exit 1esac
exit 0-------------------------------------------------------------------------------------------
#添加文件权限,添加为系统服务
[root@pyx nginx-1.26.0]# chmod -x /etc/init.d/nginx
[root@pyx nginx-1.26.0]# chkconfig --add nginx
[root@pyx nginx-1.26.0]# systemctl stop nginx 
方法二:
#在/lib/systemd/system/目录下创建nginx.service文件
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	
-------------------------------------------------------------------------------------------
#添加到systemctl管理服务
chmod 754 /lib/systemd/system/nginx.service
systemctl start nginx.service
systemctl enable nginx.serviceng
方法三:直接通过nginx的yum仓库安装nginx服务,能够直接使用systemctl管理服务
[root@localhost ~]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# ls
local.repo  repo.bak
[root@localhost yum.repos.d]# rz -E
[root@localhost yum.repos.d]# ls
local.repo  nginx.repo  repo.bak
[root@localhost yum.repos.d]# yum install -y nginx
[root@localhost yum.repos.d]# systemctl start nginx
[root@localhost yum.repos.d]# netstat -lntp | grep 80
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      4186/nginx: master
[root@localhost yum.repos.d]# cd /usr/lib/systemd/system/     
#检验在这个目录下是否生成nginx的配置文件
[root@localhost system]# ls ./ | grep nginx
nginx-debug.service
nginx.service
[root@localhost system]# cat nginx.service 
[Unit]
Description=nginx - high performance web server
Documentation=http://nginx.org/en/docs/
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target[Service]
Type=forking
PIDFile=/var/run/nginx.pid
ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf
ExecReload=/bin/sh -c "/bin/kill -s HUP $(/bin/cat /var/run/nginx.pid)"
ExecStop=/bin/sh -c "/bin/kill -s TERM $(/bin/cat /var/run/nginx.pid)"[Install]
WantedBy=multi-user.target

二、Nginx服务的主配置文件nginx.conf

1)nginx主配置文件位置 

2)nginx的进程分为主进程和工作进程

  1. 主进程mster process:负责管理worker工作进程,一个主进程可以跟多个工作进程;加载配置文件。

  2. 工作进程worker process:处理连接请求的

3)nginx配置文件分以下几个块

1、全局块:全局配置,对全局生效;
2、events块:配置影响 Nginx 服务器与用户的网络连接,可以理解为IO配置
3、http块:配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置;
4、server块配置虚拟主机的相关参数,一个 http块中可以有多个 server 块,一个server块相当于一个代理或者一台虚拟主机;
5、location块用于配置匹配的uri
6、upstream:配置后端服务器具体地址,负载均衡配置不可或缺的部分。

nginx配置中以“;”结尾表示一行内容结束。

1.全局配置

#user nobody;          #运行用户,若编译时未指定则默认为 nobody
worker_processes 1;    #设置工作进程数量,一般设置为和 CPU核数一样;默认为1;设置为auto,nginx将会自己获取当前系统的CPU数值
#error_log logs/error.log;     #错误日志文件的位置位于logs目录下
#pid logs/nginx.pid;           #PID 文件的位置位于logs目录下
worker_rlimit_nofile 65535;    #指定worker子进程可以打开的最大文件句柄数,默认为1024(软件层级理论上支持65535的并发,但实际操作系统每个用户能个打开的文件数也是有限制的)

cpu核心数怎么查看:lscpu、cat /proc/cpuinfo、top等命令。注意:进程数到8核之后就效果不明显了,而且很少情况下给很大的服务器安装nginx,也不要需要分配给nginx高资源的服务器。

2.event块配置(IO事件配置)

use epoll; 		#使用 epoll I/O模型,2.6及以上版本的系统内核,建议使用epoll模型以提高性能
worker_connections 65535; 	#每个 worker 子进程能够处理的最大并发连接数
multi_accept on;            #是否一次性将监听到的连接全接收进来,默认为off,关闭时一次接收一条连接
accept_mutex on;            #默认为on,开启时表示以串行方式接入新连接,否则将通报给所有worker。这可能会浪费资源并产生不可预计的后果,例如惊群问题,在nginx里是一个连接进来,会激活所有的工作进程,会导致cpu资源被大大的浪费。

3.http块配置

http块中可以有多个server块

http {##文件扩展名与文件类型映射表include       mime.types;  #include可以加载另外一个文件的配置。mime.types位于/usr/local/nginx/conf目录中,包含nginx支持的相关的网页类型文件格式等##默认使用的文件类型default_type  application/octet-stream;##指定访问日志记录名称为main和格式#log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '#                  '$status $body_bytes_sent "$http_referer" '#                  '"$http_user_agent" "$http_x_forwarded_for"';##指定访问日志的保存位置,main是我们上面设置的格式#access_log  logs/access.log  main;##开启高效的文件传输模式sendfile        on;##建议开启tcp_nopush和tcp_nodelay用于防止网络阻塞tcp_nopush     on;tcp_nodelay    on;##连接保持超时时间,单位是秒#keepalive_timeout  0;keepalive_timeout  65;##gzip模块设置,设置是否开启gzip压缩输出,减少传输数据包的大小,速度更快#gzip  on;server { ······}
}

变量名作用
$remote_addr与$http_x_forwarded_for

用以记录客户端的ip地址。

$remote_add只会记录上一层服务器的地址,获取不到真实的客户端地址;

$http_x_forwarded_for会记录数据包沿途经过的所有ip地址,能记录到真实的客户端地址。

$remote_user用来记录客户端用户名称
$time_local用来记录访问时间与时区
$request用来记录请求的url与http协议
$status用来记录请求状态返回码;成功是200
$body_bytes_sent记录发送给客户端文件主体内容大小
$http_referer用来记录从哪个页面链接访问过来的
$http_user_agent记录客户浏览器的相关信息

 4.server块配置

server块中可以有多个location块匹配用户的访问路径

	##Web服务的监听配置server { #server表示站点的配置,每个站点可以设置为一个server,server就是虚拟机##监听地址及端口,每个站点的地址和端口号可以不一样,如果只有端口,默认监听任意地址listen 80; ##设置站点域名,可以有多个,用空格隔开server_name www.kgc.com; ##网页的默认字符集charset utf-8;location / {......}location /xxx {......}location /xxx {......}##内部错误的反馈页面error_page 500 502 503 504 /50x.html;##错误页面配置location = /50x.html {root html;}}

5.location块配置

location默认前缀匹配,默认从/根目录开始匹配

location / {##设置网站根目录的位置/usr/local/nginx/htmlroot html;##设置默认首页文件名,注意匹配index index.html index.htm index.php;
}

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

  1. root 根路径配置,可以写在 http、server、location 等配置中:                                            如root /var/www/html                                                                                                              请求www.xy101.com/test/1.html,会返回文件/var/www/html/test/1.html
  2. alias 别名配置,只能写在 location 中:                                                                                 如alias /var/www/html/ (  注:使用 alias 末尾要添加 /  )                                                       请求www.kgc.com/test/1.html,会返回文件/var/www/html/1.html
  3. proxy_pass(反向代理配置)
     

nginx 的 root 和 alias 指定路径的区别?

①root(根目录)
location /abc {
    root /var/www;
}
处理方式: root路径+location路径    

http://192.168.80.200/abc/xy101/scj.html  -->  /var/www/abc/xy101/scj.html

②alias(别名目录、虚拟目录)
location /abc {
    alias /var/www;               
}
处理方式: alias路径替换location路径

 http://192.168.80.200/abc/xy101/scj.html  -->   /var/www/xy101/scj.html

访问路径示例

客户输入的访问文件路径实际访问到的服务端文件路径
http://192.168.170.200/index.html/usr/local/nginx/html/index.html
http://192.168.170.200/(没有指定文件)/usr/local/nginx/html/index.html访问默认的文件,如果没有index.html则访问index.htm
http://192.168.170.200/abc/scj.html前缀最长匹配/abc,则为/var/www/html/abc/scj.html
http://192.168.170.200/test/scj.html前缀test匹配不到,所以匹配根目录,则为/usr/local/nginx/html/test/index.html
http://192.168.170.200/nba/scj.html

前缀最长匹配/nba,则访问/var/www/html/scj.html

三、nginx服务配置内容

1)Nginx 设置最大并发量

①软件层面

nginx应用程序配置文件设置  
worker_processes            #工作进程数,一般设置为与CPU数量相同,或auto    
worker_connections          #每个worker进程能够处理的连接数
worker_rlimit_nofile 65535  #设置每个worker进程最大可以打开的文件数

②系统层面

nginx服务器系统设置    ulimit -n  65535                                                    
#指定进程能够打开的文件数
vim /etc/security/limits.conf  -->    *  soft  nofile  65535*  hard  nofile  65535

2)nginx 平滑升级

先下载最新软件包上传到系统,然后进入最新的软件包找到configure文件所在目录使用./configure按照原配置升级(原配置nginx -V),再用make编译升级成二进制文件,把新的nginx二进制文件替换掉原来的nginx程序文件,然后再新版软件包的目录使用make upgrade或kill -USR2 $(cat /usr/local/nginx/logs/nginx.pid)进行平滑升级即可。版本之间不要跨步太大,可能会出现异常。

3)nginx 访问状态统计

1、安装nginx时添加状态统计模块 ./configure --with-http_stub_status_module。适用nginx -V查看安装时是否开启访问状态统计模块。查看软件包目录中的options目录cat /opt/nginx-1.26.0/auto/options | grep YES ,可查看 nginx 已开启的模块。(--with表示开启某个模块,--without表示关闭模块)

2、修改配置文件/usr/local/nginx/conf/nginx.conf,添加开启状态统计功能的location块配置: stub_status on;  access_log off;修改配置后重载nginx

3、测试验证

  • 浏览器访问http://192.168.170.200/ngx-state
  • curl -s http://192.168.170.200/ngx-state(curl相当于Linux命令行的客户端)

补充:如何获取当前nginx服务器的并发量?写个定期检查nginx并发量,过高则告警的脚本。

理论并发量=worker_processes*worker_connections

(思路:确保开启状态统计模块 --with-http_stub_status_module ,配置文件中也要开启状态统计功能 stub_status on; 开启访问状态统计页面,看 Active connections: 行的数组)

方法①curl -s http://192.168.170.200/ngx-state | awk '/Active connections/ {print $NF}'

方法②ss/netstat -antp | grep nginx | grep -c ESTAB

可以写一个并发过高就报警的脚本:把第一种方法命令得到的值赋给一个变量,if语句如果变量的值超过多少就告警,加入计划性任务重定期检查。

4)nginx 访问认证

实现网页的认证

1.安装 httpd-tools 软件包,获得htpasswd 命令工具,使用 htpasswd -c创建一个用户认证文件(路径)+ 密码,并修改文件的归属nginx和权限400(只能用户读取,保障安全性);


2.修改配置文件/usr/local/nginx/conf/nginx.conf,添加 auth_basic   auth_basic_user_file 配置;

3.重启服务,测试验证。

5)nginx 访问控制

匹配规则从上往下,匹配到即停止,配置后重载服务生效

  • 在 http{...}配置块中添加配置(对所有站点生效)  
  • 在 server{...}配置块中添加配置(对当前站点所有的访问路径生效)  
  • 在 location{...}配置块中添加配置(只对当前站点指定的URL访问路径生效)

黑名单配置 deny IP|网段;  

白名单配置 allow IP|网段;    

其他主机配置      deny all;

补充:通过分析访问日志把一分钟内发出10次访问的用户,怀疑在共计我们的服务器,临时禁用一段时间,然后放出来,重新统计的脚本。vim nginx.sh

脚本思路:脚本执行之前现将黑名单文件清空,然后再用分析日志文件分析IP地址出现次数,如果访问次数超过10次,那么会输出deny+ip地址到黑名单文件,然后重载服务,把黑名单文件移走到指定存放的目录中并以指定时间格式命名文件,再去清空当前的日志文件。如果没有超过10也要重载nginx,相当于清空blockip黑名单文件。

测试:几台主机多次访问nginx服务器,使nginx的access.log文件中有大量访问记录。然后命令可以查看访问的主机名和次数,进行禁用操作。

6)nginx虚拟主机类型

1.基于不同域名实现的虚拟主机

生产环境中用的最多的就是基于域名的虚拟主机类型,用不同域名的主机访问同一台服务器的不同站点。

server {
    server_name XXX;         #指定不同的域名
}

要想实现基于域名的nginx虚拟主机实验有以下几个步骤:

①需要准备域名解析

方法一:/etc/hosts文件直接添加解析记录

方法二:配置dns服务器

②服务器准备至少2个站点的网页根目录和网页文件

③修改nginx服务器配置文件,添加站点域名、指定访问日志目录、日志名等,重启服务

④访问测试:使用不同域名访问到同一个nginx服务器下不同站点下的网页文件

2.基于IP的虚拟主机类型

server {
    listen  <IP>:端口;       #指定不同的IP
}

①在nginx服务器准备2个网卡(也可以做虚网卡实现)

②修改nginx配置文件/usr/local/nginx/conf/nginx.conf,重载服务

③验证:使用ip地址访问

3.基于端口的虚拟主机类型

server {
    listen   IP:<端口>;      #指定不同的端口
}

①修改nginx配置文件/usr/local/nginx/conf/nginx.conf,重启nginx服务,确定监听端口号为两个

②验证:使用不同端口号访问

补充:

1.如何设置2个cpu,5万并发量?

配置文件中worker_process设置为2或者auto,再在IOevent块中设置worker_connection至少设置为25000以上,然后再设置每个工作进程打开文件数在全局块中加配置,值与连接数保持一致即可。然后再vim /etc/security/limits.conf  -->    *  soft  nofile  65535
                                                                       *  hard  nofile  65535

2.写个脚本查看访问日志,看有没有主机在攻击

先准备一个空的配置文件,用来存放禁止访问nginx的配置文件,并且在nginx配置文件的include块中加载这个文件。先用awk过滤nginx的访问日志,截取出客户端ip地址字段,用sort对ip地址进行重新排序,用uniq-c统计数,再用awk获取访问次数进行判断,将超过一定值的ip地址过滤出来,用for循环遍历,输出到禁止访问文件中。重载nginx配置文件中的include块

3.前台启动nginx方法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/23161.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MacOS 安装C语言版TensorFlow

文章目录 安装C语言版TensorFlow解压归档环境变量c_api.hC语言示例 安装C语言版TensorFlow 官方文档&#xff1a;https://tensorflow.google.cn/install/lang_c?hlzh-cnTensorFlow 提供了一个 C API&#xff0c;该 API 可用于为其他语言构建绑定。该 API 在 c_api.h 中定义&a…

从C到C++,C++入门(2)

在C入门篇&#xff08;1&#xff09;中&#xff0c;博主为大家简单介绍了什么是C&#xff0c;以及C中的关键字&#xff0c;命名空间&#xff0c;输入与输出和缺省参数的相关知识。今天就让我们继续一起学习C的基础知识点吧&#xff01;&#xff01; 1.函数重载 1.1函数重载的概…

经典的泡泡龙游戏源码免费下载

源码介绍 HTML5泡泡龙冒险小游戏是一款休闲网页游戏&#xff0c;游戏玩法是玩家从下方中央的弹珠发射台射出彩珠&#xff0c;多于3个同色珠相连则会消失。 源码下载 经典的泡泡龙游戏源码免费下载

C# WPF入门学习主线篇(六)—— TextBox常见属性和事件

欢迎回到C# WPF入门学习系列的第六篇。在前面的文章中&#xff0c;我们探讨了按钮&#xff08;Button&#xff09;的事件处理。今天&#xff0c;我们将继续学习另一个常用的WPF控件——TextBox。本文将介绍 TextBox 的常见属性和事件&#xff0c;并通过示例代码展示如何在实际应…

企业办公网安全管控挑战与解决方案

在数字化浪潮的推动下&#xff0c;企业正经历前所未有的变革。然而&#xff0c;随之而来的是一系列复杂的网络安全风险和挑战。我们的网络边界不再清晰&#xff0c;各种设备轻松接入企业网络&#xff0c;这不仅带来了便利&#xff0c;也极大地增加了安全风险。想象一下&#xf…

JavaScript 学习笔记 总结

回顾&#xff1a; Web页面标准 页面结构&#xff1a;HTML4、HTML5页面外观和布局&#xff1a;CSS页面行为&#xff1a;JavaScript强调三者的分离前后端分离开发模式 响应式设计Bootstrap框架入门 Bootstrap总结 基础 下载和使用基础样式&#xff1a;文本样式、图片样式、表格…

笔记 | 软件工程03:软件过程和软件开发方法

软件过程 1 何为软件过程模型 1.1 软件开发的特点 1.2 软件过程 1.3 软件过程模型 1.3.1 软件过程模型产生的背景 软件工程产生之前的软件开发——作坊式的个人创作&#xff1a;聚焦于编写代码&#xff1b;依靠个体技能&#xff0c;缺乏合作&#xff1b;关注时空利用&#x…

Threejs加载DOM+CSS到场景中,实现3D场景展示2D平面的效果

1. 前言 本篇文章主要实现了将DOM元素转换为Threejs可以使用的数据结构,使用CSS2DRenderer渲染器渲染这些DOMCSS的平面,使其可以作为一个物体添加到Threejs场景里 如下效果图: 2. 实现步骤 首先创建一个ThreejsVueVite的项目,作为本次的demo项目下载Threejs第三方库 yarn…

C++候捷stl-视频笔记4

一个万用的hash function 哈希函数的形式&#xff0c;一种是一般函数(右边)&#xff0c;一种是成员函数(左边)&#xff0c;类的对象将成为函数对象 具体做法例子。直接把属性的所有hash值加起来&#xff0c;会在hashtable中会产生很多的碰撞&#xff0c;放在同一个bucket中的元…

游戏UI设计秘诀:专家总结与实际案例解析!

随着游戏产业的不断发展&#xff0c;游戏UI界面设计变得越来越重要。一个好的游戏UI界面设计可以让玩家更容易理解游戏规则&#xff0c;提高游戏的可玩性&#xff0c;增加游戏的吸引力。在本文中&#xff0c;我们将讨论游戏UI界面设计的重要性和一些常见的设计原则。 1. 游戏U…

前端框架中的虚拟DOM和实际DOM之间的关系

聚沙成塔每天进步一点点 本文回顾 ⭐ 专栏简介前端框架中的虚拟DOM和实际DOM之间的关系1. 实际DOM&#xff08;Real DOM&#xff09;1.1 定义1.2 特点 2. 虚拟DOM&#xff08;Virtual DOM&#xff09;2.1 定义2.2 特点 3. 虚拟DOM的工作流程3.1 创建虚拟DOM3.2 比较虚拟DOM&…

Django redirect()函数实现页面重定向

1&#xff0c;通过路由反向解析进行重定向 1.1 添加视图函数 myshop/app2/views.py from django.http import HttpResponse from django.shortcuts import render from django.urls import reverse def index(request):return HttpResponse("app2 的index")# 反向…

PVE安装虚拟主机

本文记录PVE安装其他虚拟主机的步骤&#xff0c;以安装win-server为例。裸机安装PVE则不是本文主题。 准备文件 获取Windows系统镜像 win server镜像可以从官网获取普通Windows镜像可从MSDN获取此外&#xff0c;安装Windows系统还需要从PVE下载特殊驱动 获取Windows必要驱动 …

康谋技术 | 自动驾驶:揭秘高精度时间同步技术(二)

在自动驾驶中&#xff0c;对车辆外界环境进行感知需要用到很多传感器的数据&#xff08;Lidar&#xff0c;Camera&#xff0c;GPS/IMU&#xff09;&#xff0c;如果计算中心接收到的各传感器消息时间不统一&#xff0c;则会造成例如障碍物识别不准等问题。 为了对各类传感器进…

提高工作效率的神器有哪些?

在这个人工智能技术蓬勃发展的时代&#xff0c;很多AI工具极大地提升我们的工作效率&#xff0c;比如很多人在用的ChatGPT、Kimi&#xff0c;它们几乎无所不能&#xff0c;小编在日常工作也用它们&#xff0c;建议想抓住AI风口&#xff0c;或者是想用这些工具提升自己的朋友去学…

windows10 安装子linux系统(WSL安装方式)

在 windows 10 平台采用了WSL安装方式安装linux子系统 1 查找自己想要安装的linux子系统 wsl --list --online 2 在线安装 个人用Debian比较多&#xff0c;这里选择Debian&#xff0c;如下图&#xff1a; wsl --install -d Debian 安装完成&#xff0c;如下&#xff1a; 相关…

【JS重点知识03】定时器—间歇函数

一&#xff1a;间歇函数的应用场景 网页倒计时是需要每个一段时间需自动执行一段代码&#xff0c;而不需要手动去触发&#xff1b;间歇函数刚好满足了这一要求&#xff1b; 二&#xff1a;间歇函数的使用 1 开启定时器 语法规范&#xff1a; 1 setInterval(匿名函数,时间)…

Java版电商平台B2B2C:多商家直播商城系统特性解析

B2B2C平台&#xff0c;立足于传统电商领域&#xff0c;同时引入了创新的商业模式。该平台不仅支持商家入驻和平台自营&#xff0c;还积极构建了一个全新的市场环境&#xff0c;旨在为各行各业及互联网创业者提供更多收益机会。 该平台以消费者需求为中心&#xff0c;帮助企业构…

PyQt5+SQLlite3基于邮箱验证的登陆注册找回系统

本期教程投稿一篇实用性的基于邮箱登陆注册找回于一体的系统&#xff0c;在日常的开发和软件应用中非常常见&#xff0c;并且也使用了逻辑与界面分离的写法&#xff0c;那这个文章将详细的为大家介绍整个流程&#xff0c;但是细节的话还需要大家自己去完善&#xff0c;也欢迎大…

人工智能的兴起和发展

人工智能的兴起 人工智能&#xff0c;artificial intelligence&#xff0c;缩写为AI。 它是随着计算机技术的发展才逐步产生并发展起来的一门学科。关于AI的定义有很多种&#xff0c;通俗一点说&#xff0c;它企图了解智能的实质&#xff0c;并生产出一种新的&#xff0c;能以…