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稳定版本

bash 复制代码
[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关闭模块

bash 复制代码
[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程序

①启动

bash 复制代码
#开启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                                             #与之前查看的进程号是一致的

②关闭

bash 复制代码
#关闭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

③重载

bash 复制代码
#重载nginx
kill -1 <PID号>
kill -s HUP <PID号>
killall -1 nginx
killall -s HUP nginx  重载
nginx -s reload

④重新生成日志文件

bash 复制代码
#重建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平滑升级。

bash 复制代码
#平滑升级
[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]服务安装的相关设置,在什么级别去运行,可设置为多用户

bash 复制代码
方法一:
#先写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 1

esac
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 
bash 复制代码
方法二:
#在/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
bash 复制代码
方法三:直接通过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.全局配置

bash 复制代码
#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事件配置)

bash 复制代码
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块

bash 复制代码
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块匹配用户的访问路径

bash 复制代码
	##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默认前缀匹配,默认从/根目录开始匹配

bash 复制代码
location / {
	##设置网站根目录的位置/usr/local/nginx/html
	root 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 设置最大并发量

①软件层面

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


②系统层面

bash 复制代码
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、测试验证

补充:如何获取当前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方法

相关推荐
Pythonliu724 分钟前
茴香豆 + Qwen-7B-Chat-Int8
linux·运维·服务器
你疯了抱抱我25 分钟前
【RockyLinux 9.4】安装 NVIDIA 驱动,改变分辨率,避坑版本。(CentOS 系列也能用)
linux·运维·centos
小O_好好学2 小时前
CentOS 7文件系统
linux·运维·centos
哲伦贼稳妥2 小时前
一天认识一个硬件之机房地板
运维·网络·经验分享·其他
苹果醋32 小时前
快速玩转 Mixtral 8x7B MOE大模型!阿里云机器学习 PAI 推出最佳实践
spring boot·nginx·毕业设计·layui·课程设计
john_hjy3 小时前
11. 异步编程
运维·服务器·javascript
x晕x3 小时前
Linux dlsym符号查找疑惑分析
linux·运维·服务器
活跃的煤矿打工人3 小时前
【星海saul随笔】Ubuntu基础知识
linux·运维·ubuntu
tangdou3690986554 小时前
两种方案手把手教你多种服务器使用tinyproxy搭建http代理
运维·后端·自动化运维
北京智和信通4 小时前
云平台和虚拟化智慧运维监控,全面提升故障感知与处置能力
运维·虚拟化·云平台·虚拟机监控