Nginx网站服务【☆☆☆】

news2024/10/7 12:23:26

市面上常用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 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 
方法二:
#在/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/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 设置最大并发量

①软件层面

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.coloradmin.cn/o/1792176.html

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

相关文章

【C语言】一节课拿捏---动态内存分配

谢谢观看&#xff01;希望以下内容帮助到了你&#xff0c;对你起到作用的话&#xff0c;可以一键三连加关注&#xff01;你们的支持是我更新地动力。 因作者水平有限&#xff0c;有错误还请指出&#xff0c;多多包涵&#xff0c;谢谢&#xff01; 目录 一、 为什么要有动态内存…

关于IDEA创建Maven一直爆红无法下载的问题

你能看到这我就知道你肯定已经试过了网上的很多方法了&#xff0c;我之前也是&#xff0c;试过了很多一直无法正常下载&#xff0c;我也是找人给 线下看了看解决了&#xff0c;我总结一下从头到尾排除问题&#xff0c;试到最后要是还解决不了你直接私信我&#xff0c;我给你看看…

vue3+uniapp

1.页面滚动 2.图片懒加载 3.安全区域 4.返回顶部&#xff0c;刷新页面 5.grid布局 place-self: center; 6.模糊效果 7.缩放 8.微信小程序联系客服 9.拨打电话 10.穿透 11.盒子宽度 12.一般文字以及盒子阴影 13.选中文字 14.顶部安全距离 15.onLoad周期函数在setup语法糖执行后…

微信小程序-案例:本地生活-首页(不使用网络数据请求)

一、 1.页面效果&#xff1a; 二、 1.新建项目并添加页面 在app.json文件中&#xff1a; "pages": ["pages/home/home","pages/message/message","pages/contact/contact"] 2.配置导航栏效果 在app.json文件中&#xff1a; &quo…

DVWA-XSS(DOM)

Low 后端没有代码&#xff0c;点击select按钮动作是前端的JS代码进行处理的 function addEventListeners() {var source_button document.getElementById ("source_button");if (source_button) {source_button.addEventListener("click", function() {v…

Doris Connector 结合 Flink CDC 实现 MySQL 分库分表

1. 概述 在实际业务系统中为了解决单表数据量大带来的各种问题&#xff0c;我们通常采用分库分表的方式对库表进行拆分&#xff0c;以达到提高系统的吞吐量。 但是这样给后面数据分析带来了麻烦&#xff0c;这个时候我们通常试将业务数据库的分库分表同步到数据仓库时&#x…

【杂谈】AIGC之ChatGPT-与智能对话机器人的奇妙对话之旅

与智能对话机器人的奇妙对话之旅 引言 在数字时代的浪潮中&#xff0c;ChatGPT如同一位智慧的旅伴&#xff0c;它不仅能够与我们畅谈古今&#xff0c;还能解答我们的疑惑&#xff0c;成为我们探索知识海洋的得力助手。今天&#xff0c;就让我们走进ChatGPT的世界&#xff0c;…

Capture One Pro 23:专业 Raw 图像处理的卓越之选

在当今的数字摄影时代&#xff0c;拥有一款强大的图像处理软件至关重要。而 Capture One Pro 23 for Mac/Win 无疑是其中的佼佼者&#xff0c;为摄影师和图像爱好者带来了前所未有的体验。 Capture One Pro 23 以其出色的 Raw 图像处理能力而闻名。它能够精准地解析和处理各种…

题号:BC19 题目:反向输出一个四位数

题号&#xff1a;BC19 题目&#xff1a;反向输出一个四位数 废话不多说&#xff0c;上题目&#xff1a; 解题思路&#xff1a; 我们发现可以用%和/两个操作符就可以解决。 代码如下: int main() {int a 0;scanf("%d ",& a);while (a){printf("%d "…

基于googlenet深度学习网络的睁眼闭眼识别算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 .................................................................. % 对测试集进行分类预…

如何通过 6 种简单方法将照片从华为转移到 PC?

华为作为全球领先的智能手机供应商之一&#xff0c;最近推出了其自主研发的操作系统——HarmonyOS 2.0&#xff0c;旨在为智能手机、平板电脑和智能手表等设备提供更流畅的用户体验。随着Mate 40/P40等系列手机计划升级到HarmonyOS 2.0&#xff0c;用户可能需要将手机中的文件备…

Aws EC2,kubeadm方式安装kubernetes(k8s)

版本 docker版本&#xff1a;20.10.25 k8s版本&#xff08;kubeadm&#xff0c;kubelet和kubectl&#xff09;&#xff1a;1.20.10-0 初始化 # 禁用 SELinux sudo setenforce 0 sudo sed -i s/^SELINUXenforcing$/SELINUXpermissive/ /etc/selinux/config# 关闭防火墙 sudo …

计算机网络—路由器综合实验

一、实验内容 利用1个三层交换机和2个路由器完成以下实验&#xff1a; 1、路由器的基本配置 2、三层交换机的基本配置及路由配置 3、路由协议 &#xff08;动态路由RIPv2&#xff09; 二、实验环境与设备 &#xff08;一&#xff09;实验环境 Cisco Packet Tracer 8.2.1 &am…

1V1音视频实时互动直播系统

李超老师的项目 先肯定分为两个两个端&#xff0c;一个是服务器端一个是客户端。客户端用于UI界面的显示&#xff0c;服务器端用于处理客户端发来的消息。 我们先搭建stun和turn服务器 首先介绍一下什么是stun协议&#xff0c; 它是用来干什么的&#xff1f; stun协议存在…

有没有全面的人、货、场零售数据分析方案?

有。奥威BI零售数据分析方案正是这样一套全面的人、货、场零售数据分析解决方案&#xff0c;旨在帮助零售企业实现数据驱动的决策&#xff0c;优化业务流程&#xff0c;提升市场竞争力。 一、方案概述 该零售数据分析方案基于先进的BI技术&#xff0c;预设了以人、货、场、供…

Ubuntu安装cuda

文章目录 前言一、安装NVIDIA驱动1.1 过程中的问题1.2 解决方法1.3 重启后出现 perform MOK management 二、安装Cuda2.1 检查是否安装显卡驱动2.2 安装Cuda2.3 验证CUDA是否安装成功 三、配置环境变量---未完2.4 图片居中加调整大学 总结 #pic_center 前言 只是为方便学习&…

【设计模式深度剖析】【2】【行为型】【命令模式】| 以打开文件按钮、宏命令、图形移动与撤销为例加深理解

&#x1f448;️上一篇:模板方法模式 设计模式-专栏&#x1f448;️ 文章目录 命令模式定义英文原话直译如何理解呢&#xff1f; 四个角色1. Command&#xff08;命令接口&#xff09;2. ConcreteCommand&#xff08;具体命令类&#xff09;3. Client&#xff08;客户端&…

Linux驱动开发笔记(六)中断子系统及实验

文章目录 前言一、中断子系统框架1. 中断硬件简单描述2. 中断的软件描述2.1 中断处理的两部分模型2.2 系统框架 二、GIC v3中断控制器1. GIC v3基本结构1.1 Distributor1.2 Redistributor1.3 ITS1.4 CPU interface 2. 中断类型与特点3. 中断号 三、函数编写3.1 相关API函数3.2 …

【自动驾驶】针对低速无人车的线控底盘技术

目录 术语定义 一般要求 操纵装置 防护等级 识别代号 技术要求 通过性要求 直线行驶稳定性 环境适应性要求 功能安全要求 信息安全要求 故障处理要求 通信接口 在线升级(OTA) 线控驱动 动力性能 驱动控制响应能力 线控制动 行车制动 制动响应能力 线控转向 总体要求 线控…

计算机网络 期末复习(谢希仁版本)第5章

**屏蔽作用&#xff1a;**运输层向高层用户屏蔽了下面网络核心的细节&#xff08;如网络拓扑、所采用的路由选择协议等&#xff09;&#xff0c;使应用进程看见的就是好像在两个运输层实体之间有一条端到端的逻辑通信信道。 10. 端口用一个 16 位端口号进行标志&#xff0c;允许…