Nginx基础篇(Nginx目录结构分析、Nginx的启用方式和停止方式、Nginx配置文件nginx.conf文件的结构、Nginx基础配置实战)

article/2025/6/26 8:29:09

文章目录

  • 1. Nginx目录结构分析
    • 1.1 conf目录
    • 1.2 html目录
    • 1.3 logs目录
    • 1.4 sbin目录
  • 2. Nginx的启用方式和停止方式
    • 2.1 信号控制
      • 2.1.1 信号
      • 2.1.2 调用命令
    • 2.2 命令行控制
      • 2.2.1 基础操作类
      • 2.2.2 配置测试类
      • 2.2.3 进程控制类
      • 2.2.4 路径与文件类
      • 2.2.5 高级配置类
  • 3. Nginx配置文件(nginx.conf)的结构
    • 3.1 全局块
      • 3.1.1 user指令
      • 3.1.2 work_process指令
      • 3.1.3 daemon指令
      • 3.1.4 pid指令
      • 3.1.5 error_log指令
      • 3.1.6 include指令
    • 3.2 events块
      • 3.2.1 accept_mutex指令
      • 3.2.2 multi_accept指令
      • 3.2.3 worker_connections指令
      • 3.2.4 use指令
    • 3.3 http块
      • 3.3.1 自定义mime-type指令
      • 3.3.2 自定义服务日志
        • 3.3.2.1 access_log指令
        • 3.3.2.2 log_format指令
      • 3.3.3 sendfile指令
      • 3.3.4 keepalive_timeout指令
      • 3.3.5 keepalive_requests指令
  • 4. Nginx基础配置实战
    • 4.1 需求分析
    • 4.2 准备工作
      • 4.2.1 创建www用户
      • 4.2.2 执行创建目录和创建文件的脚本
    • 4.3 修改nginx的配置文件
    • 4.4 开放防火墙端口
    • 4.5 访问测试

如果想了解更多与Nginx相关的内容,可以查看Nginx专栏中的文章: Nginx

视频教程:14-Nginx的目录结构分析

1. Nginx目录结构分析

在使用Nginx之前,我们先分析Nginx的目录结构,重点关注conf、html、logs、sbin四个目录

在这里插入图片描述

/www/server/nginx
├── conf
│   ├── enable-php-00.conf
│   ├── enable-php-52.conf
│   ├── enable-php-53.conf
│   ├── enable-php-54.conf
│   ├── enable-php-55.conf
│   ├── enable-php-56.conf
│   ├── enable-php-70.conf
│   ├── enable-php-71.conf
│   ├── enable-php-72.conf
│   ├── enable-php-73.conf
│   ├── enable-php-74.conf
│   ├── enable-php-75.conf
│   ├── enable-php-80.conf
│   ├── enable-php-81.conf
│   ├── enable-php-82.conf
│   ├── enable-php-83.conf
│   ├── enable-php-84.conf
│   ├── enable-php.conf
│   ├── fastcgi.conf
│   ├── fastcgi.conf.default
│   ├── fastcgi_params
│   ├── fastcgi_params.default
│   ├── koi-utf
│   ├── koi-win
│   ├── luawaf.conf
│   ├── mime.types
│   ├── mime.types.default
│   ├── nginx.conf
│   ├── nginx.conf.default
│   ├── pathinfo.conf
│   ├── proxy.conf
│   ├── rewrite
│   ├── scgi_params
│   ├── scgi_params.default
│   ├── uwsgi_params
│   ├── uwsgi_params.default
│   ├── vhost
│   └── win-utf
├── html
│   ├── 50x.html
│   └── index.html
├── logs
│   ├── error.log
│   └── nginx.pid
├── sbin
│   └── nginx

1.1 conf目录

conf目录存储的是Nginx的配置文件

  • CGI,Common Gateway Interface,公共网关接口
  • CGI是一种一种标准协议,用于在Web服务器和外部程序(如脚本或二进制文件)之间传递数据,实现动态生成网页内容
  • fastcgi.conf:fastcgi相关配置文件

  • fastcgi.conf.default:fastcgi.conf的备份文件

  • fastcgi_params:fastcgi的参数文件

  • fastcgi_params.default:fastcgi的参数备份文件

  • scgi_params:scgi的参数文件

  • scgi_params.default:scgi的参数备份文件


koi-utf、koi-win、win-utf:这三个文件都是与编码转换映射相关的配置文件,用于将一种编码转换成另一种编码


  • uwsgi_params:uwsgi的参数文件
  • uwsgi_params.default:uwsgi的参数备份文件

  • mime.types:记录的是HTTP协议中的Content-Type的值和文件后缀名的对应关系
  • mime.types.default:mime.types的备份文件

  • nginx.conf:这个是Nginx的核心配置文件,这个文件非常重要,也是我们即将要学习的重点
  • nginx.conf.default:nginx.conf的备份文件

1.2 html目录

html目录存放的事Nginx自带的两个静态的html页面

  • 50x.html:访问失败后的失败页面
  • index.html:成功访问的默认首页

1.3 logs目录

logs目录存储的是Nginx的日志文件,当Nginx服务器启动后,logs目录中会有 access.log error.log 和nginx.pid三个文件出现

1.4 sbin目录

sbin目录存储的是nginx文件,nginx文件用于控制Nginx的启动和停止等操作

2. Nginx的启用方式和停止方式

在Linux系统中有很多种方式启用Nginx和停止Nginx,本文介绍两种:

  • 信号控制
  • 命令行控制

2.1 信号控制

Nginx默认采用的是多进程的方式来工作的,当Nginx启动后,我们通过sudo ps -ef | grep nginx命令可以查看到如下内容

sudo ps -ef | grep nginx

在这里插入图片描述

从上图中可以看到,Nginx后台进程中包含一个master进程和多个worker进程,master进程主要用来管理worker进程,包含接收外界的信息,并将接收到的信号发送给各个worker进程,监控worker进程的状态

当worker进程出现异常退出后,会自动重新启动新的worker进程,而worker进程则是专门用来处理用户请求的,各个worker进程之间是平等的并且相互独立,处理请求的机会也是一样的

nginx的进程模型,我们可以参考下图:

在这里插入图片描述

我们现在作为管理员,只需要通过给master进程发送信号就可以来控制Nginx,这个时候我们需要有两个前提条件,一个是要操作的master进程,一个是信号


要想操作Nginx的master进程,就需要获取到master进程的进程号ID,获取方式有两个

  1. 通过ps -ef | grep nginx指令获取

  2. 通过/www/server/nginx/logs/nginx.pid日志文件获取

2.1.1 信号

信号作用
TERM/INT立即关闭整个服务
QUIT"优雅"地关闭整个服务
HUP重读配置文件并使用服务对新配置项生效
USR1重新打开日志文件,可以用来进行日志切割
USR2平滑升级到最新版的nginx
WINCH所有子进程不在接收处理新连接,相当于给work进程发送QUIT指令

2.1.2 调用命令

调用命令的格式为:kill -signal PID

  • signal:信号
  • PID:Nginx的master进程的PID

示例一:发送TERM/INT信号给master进程,Nginx服务将立即关闭

kill -TERM PID
kill -TERM `cat /www/server/nginx/logs/nginx.pid`kill -INT PID 
kill -INT `cat /www/server/nginx/logs/nginx.pid`

示例二:发送QUIT信号给master进程,master进程会控制所有的work进程不再接收新的请求,等所有请求处理完后,在把进程都关闭掉

kill -QUIT PIDkill -TERM `/www/server/nginx/logs/nginx.pid`

示例三:发送HUP信号给master进程,master进程会控制旧的work进程不再接收新的请求,等处理完请求后将旧的work进程关闭掉,然后根据nginx的配置文件重新启动新的work进程

kill -HUP PIDkill -TERM `cat /www/server/nginx/logs/nginx.pid`

示例四:发送USR1信号给master进程,告诉Nginx重新开启日志文件

kill -USR1 PID
kill -TERM `/www/server/nginx/logs/nginx.pid`

示例五:发送USR2信号给master进程,告诉master进程要平滑升级,这个时候会重新开启对应的master进程和work进程,整个系统中将会有两个master进程,并且新的master进程的PID会被记录在/usr/local/nginx/logs/nginx.pid而之前的旧的master进程PID会被记录在/www/server/nginx/logs/nginx.pid.oldbin文件中,接着再次发送QUIT信号给旧的master进程,让其处理完请求后再进行关闭

在这里插入图片描述

kill -USR2 PID
kill -USR2 `cat /www/server/nginx/logs/nginx.pid`
kill -QUIT PID
kill -QUIT `cat /www/server/nginx/logs/nginx.pid.oldbin`

示例六:发送WINCH信号给master进程,让master进程控制不让所有的work进程再接收新的请求,请求处理完后关闭work进程,注意master进程不会被关闭掉

kill -WINCH PID
kill -WINCH `cat /www/server/nginx/logs/nginx.pid`

2.2 命令行控制

此方式是通过Nginx安装目录下的sbin下的可执行文件nginx来控制Nginx状态,我们可以通过nginx -h来查看都有哪些参数可以用

nginx -h

root@hcss-ecs-276a:~# nginx -h
nginx version: nginx/1.28.0
Usage: nginx [-?hvVtTq] [-s signal] [-p prefix]
[-e filename] [-c filename] [-g directives]

Options:
-?,-h : this help
-v : show version and exit
-V : show version and configure options then exit
-t : test configuration and exit
-T : test configuration, dump it and exit
-q : suppress non-error messages during configuration testing
-s signal : send signal to a master process: stop, quit, reopen, reload
-p prefix : set prefix path (default: /www/server/nginx/)
-e filename : set error log file (default: logs/error.log)
-c filename : set configuration file (default: conf/nginx.conf)
-g directives : set global directives out of configuration file

在这里插入图片描述

2.2.1 基础操作类

  • -?, -h :显示帮助信息(当前界面),用于快速查看可用命令

  • -v仅显示Nginx的版本号

    nginx -v  # 输出: nginx version: nginx/1.28.0
    
  • -V显示完整版本信息(含编译参数),用于排查环境配置问题

    nginx -V  # 输出: 编译选项(如 --prefix=/www/server/nginx)
    

2.2.2 配置测试类

  • -t测试配置语法,不修改服务状

    nginx -t  # 输出: 语法是否正确(如 "test is successful")
    
  • -T测试配置并输出完整配置内容,用于调试复杂配置

    nginx -T  # 输出当前生效的完整配置(覆盖默认配置)
    

2.2.3 进程控制类

  • -s signal向master进程发送信号

    nginx -s reload  # 重新加载配置(热更新)
    nginx -s stop    # 强制停止服务(立即关闭)
    nginx -s quit    # 优雅停止服务(等待请求处理完)
    nginx -s reopen  # 重启日志文件(用于日志切割)
    

2.2.4 路径与文件类

  • -e filename指定错误日志文件路径

    nginx -e /var/log/nginx/error.log  # 自定义错误日志位置
    
  • -c filename指定配置文件路径(配置文件的默认路径为conf/nginx.conf

    nginx -c /etc/nginx/custom.conf  # 使用自定义配置文件
    

2.2.5 高级配置类

  • -g directives在命令行中设置全局指令(覆盖配置文件中的 nginx.conf 部分)

    nginx -g "worker_processes 4; error_log /dev/null;"  # 自定义 worker 数量和错误日志
    

3. Nginx配置文件(nginx.conf)的结构

Windows版本的Nginx和Linux版本的Nginx配置文件的整体结构相同,某个具体属性的值可能不同,本文介绍的是Linux版本的Nginx

我们浏览Nginx自带的nginx.conf配置文件,将其中的注释部分(Nginx的配置文件中使用#来注释)删掉,可以发现配置文件主要分为三大块:

  • 全局块
  • events块
  • http块(http块中可以配置多个server块,每个server块可以配置多个location块)
worker_processes  1;events {worker_connections  1024;
}http {include       mime.types;default_type  application/octet-stream;sendfile        on;keepalive_timeout  65;server {listen       80;server_name  localhost;location / {root   html;index  index.html index.htm;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}}}

3.1 全局块

3.1.1 user指令

user指令用于配置运行Nginx服务器的worker进程的用户和用户组

语法默认值位置
user user [group]nobody全局块

当客户端请求某个文件时,如果worker进程所在的用户和用户组没有该文件的访问权限,将会抛出以下错误

403 Forbidden

在这里插入图片描述

3.1.2 work_process指令

work_process指令用于配置Nginx生成工作进程的数量,这个是Nginx服务器实现并发处理服务的关键所在

理论上来说workder_process的值越大,可以支持的并发处理量也越多,但事实上这个值的设定受服务器自身的限制,建议将该值和服务器CPU的内核数保持一致,或者直接将该值设置为auto

语法默认值位置
worker_processes specific_number/auto;1/atuo全局块

将worker_processes设置成2后输入ps -ef | grep nginx指令

ps -ef | grep nginx

3.1.3 daemon指令

daemon指令用于设置Nginx是否以守护进程的方式启动

守护进程是Linux后台执行的一种服务进程,特点是独立于控制终端,不会随着终端关闭而停止

语法默认值位置
daemon on|off;daemon on;全局块

3.1.4 pid指令

pid指令用于配置存储Nginx当前master进程的进程号ID的文件路径

语法默认值位置
pid file_path;logs/nginx.pid;全局块

3.1.5 error_log指令

error_log指令用来配置Nginx错误日志的存放路径

语法默认值位置
#error_log file_path;#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
全局块、http、server、location

Nginx的日志级别如下(按严重程度从低到高排列)

日志级别解释
debug调试信息,用于开发阶段的问题排查(如变量值、函数调用链)
info普通事件记录(如服务启动/停止、请求处理完成)
notice值得注意的非错误事件(如配置变更、非致命权限警告)
warn潜在问题警告(如文件权限不足、资源占用过高)
error导致功能受阻的错误(如数据库连接失败、文件读写异常)
crit严重错误(如内存耗尽、关键组件崩溃)
alert必须立即采取措施的紧急情况(如磁盘空间不足、安全攻击检测)
emerg系统不可用/需要紧急重启(如主进程崩溃、网络协议栈失效)

建议不要设置成info及info以下的等级,因为日志级别太低时会记录大量的日志,频繁的磁盘I/O将会影响Nginx的性能

3.1.6 include指令

用来引入其他配置文件,使Nginx的配置更加灵活

语法默认值位置
#include file_path;任意位置

3.2 events块

3.2.1 accept_mutex指令

accept_mutex指令用来设置Nginx网络连接序列化

语法默认值位置
accept_mutex on|off;accept_mutex on;events

accept_mutex 设置为 on 时,它会为接受新连接的操作加锁,使得在任何时候只有一个工作进程能够接受新的连接。这样可以防止多个工作进程同时尝试接受同一个连接,从而避免了所谓的“惊群”问题(thundering herd problem)

惊群问题是指在多进程或线程环境中,当某个事件发生时,多个进程或线程同时被唤醒并尝试处理该事件,但由于只有一个进程或线程能够实际处理该事件,其他的进程或线程就会发现自己做了无用功,这会导致资源的浪费和性能的下降

通过设置 accept_mutexon,Nginx 能够确保在任意时刻只有一个工作进程去尝试接受新的连接,从而避免了多个工作进程之间的竞争,提高了连接处理的效率

在这里插入图片描述

3.2.2 multi_accept指令

multi_accept指令用于设置是否允许同时接收多个网络连接

语法默认值位置
multi_accept on|off;multi_accept on;events

multi_accept 设置为 on 时,允许一个工作进程在一次事件循环中接受多个连接,而不是一次只接受一个连接

3.2.3 worker_connections指令

worker_connections指令用于配置单个worker进程最大的连接数

语法默认值位置
worker_connections number;worker_connections 512;events

这里的连接数不仅仅包括和前端用户建立的连接数,而是包括所有可能的连接数。另外number值不能大于操作系统支持打开的最大文件句柄数量

3.2.4 use指令

use指令用于设置Nginx服务器选择哪种事件驱动来处理网络消息

语法默认值位置
use method;根据具体的操作系统而定events

Nginx 支持多种事件处理模块,最常用的是:

  1. select:这是最基础的模块,但它在大规模并发连接下效率较低,因为它的时间复杂度是 O(n)
  2. poll:比 select 有所改进,但在大量并发连接下仍然效率不高
  3. kqueue:这是在 BSD 系统上可用的模块,它非常高效,尤其是在高并发环境下
  4. epoll:这是在 Linux 系统上可用的模块,它也非常高效,尤其是在处理大量并发连接时
  5. /dev/poll:这是 Solaris 系统上的模块
  6. eventport:这是 Solaris 10 及以上版本上的模块

事件处理模型是Nginx优化部分的一个重要内容,我们强调过要使用Linux内核在2.6以上,就是为了能使用epoll函数来优化Nginx

在 Linux 系统上,epoll 是处理大量并发连接的首选方法,因为它的时间复杂度是 O(1),这意味着无论连接数多少,处理每个事件的成本都是固定的

3.3 http块

3.3.1 自定义mime-type指令

视频教程:28-Nginx的http块MIME-Type的使用


我们都知道浏览器中可以显示的内容有HTML、XML、GIF等种类繁多的文件、媒体等资源,浏览器为了区分这些资源,就需要使用mime-type

mime-type是网络资源的媒体类型,Nginx作为web服务器,也需要能够识别前端请求的资源类型

在Nginx的配置文件中,默认有以下两行配置

include mime.types;
default_type application/octet-stream;

default_type指令用于配置Nginx响应前端请求默认的mime-type类型

语法default_type mime-type;
默认值default_type text/plain;
位置http、server、location

在default_type之前还有一句include mime.types,include之前我们已经介绍过,相当于把mime.types文件中mime类型与相关类型文件的文件后缀名的对应关系加入到当前的配置文件中


请求某些接口的时候需要返回指定的文本字符串或者JSON字符串,如果逻辑非常简单或者是固定的字符串,那么可以使用Nginx快速实现,这样就不用编写程序响应请求了,可以减少服务器资源占用,并且响应性能非常快

location /get_text {# 这里也可以设置成text/plaindefault_type text/html;return 200 "This is nginx's text";
}location /get_json{default_type application/json;return 200 '{"name":"TOM","age":18}';
}

3.3.2 自定义服务日志

Nginx中日志的类型分access.log、error.log两种类型

  • access.log:记录用户所有的访问请求

  • error.log:记录Nginx本身运行时的错误信息,不会记录用户的访问请求

Nginx服务器支持对服务日志的格式、大小、输出等进行设置,需要使用到两个指令,分别是access_log和log_format指令

3.3.2.1 access_log指令

access_log指令用于设置用户访问日志的相关属性

语法默认值位置
access_log path [format[buffer=size]]access_log logs/access.log combined;http、server、location

中括号 [] 在Nginx配置语法中用于表示可选参数。如果一个参数被放在中括号内,意味着这个参数是可选的,可以根据需要选择是否提供


嵌套中括号的使用是为了清晰地表示参数之间的依赖关系和可选性,具体来说:

  • 外层中括号 [format[buffer=size]] 表示 formatbuffer=size 是可选的
  • 内层中括号 [buffer=size] 表示 buffer=size 只有在 format 已经被指定的情况下才是可选的
3.3.2.2 log_format指令

log_format指令用于指定日志的输出格式

语法默认值位置
log_format name [escape=default|json|none] string…;log_format combined “…”;http

默认的access_log指令和默认的log_format指令如下

#log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
#                  '$status $body_bytes_sent "$http_referer" '
#                  '"$http_user_agent" "$http_x_forwarded_for"';#access_log  logs/access.log  main;

3.3.3 sendfile指令

sendfile指令用于设置Nginx服务器是否使用sendfile()传输文件,该属性可以大大提高Nginx处理静态资源的性能

语法默认值位置
sendfile on|off;sendfile on;http、server、location

3.3.4 keepalive_timeout指令

keepalive_timeout指令用于设置长连接的超时时间

为什么要使用keepalive呢,我们都知道HTTP是一种无状态协议,客户端向服务端发送一个TCP请求,服务端响应完毕后断开连接

如果客户端向服务端发送多个请求,每个请求都需要重新创建一次连接,效率相对来说比较多,使用keepalive模式,可以告诉服务器端在处理完一个请求后保持这个TCP连接的打开状态,若接收到来自这个客户端的其他请求,服务端就会利用这个未被关闭的连接,而不需要重新创建一个新连接,提升效率

但是这个连接也不能一直保持,这样的话,连接如果过多,也会是服务端的性能下降,这个时候就需要我们进行设置其的超时时间

语法默认值位置
keepalive_timeout time;keepalive_timeout 65s;http、server、location

3.3.5 keepalive_requests指令

keepalive_requests指令用于设置一个keep-alive连接使用的次数

语法默认值位置
keepalive_requests number;keepalive_requests 100;http、server、location

4. Nginx基础配置实战

视频教程:01-Nginx基础配置实例需求分析

4.1 需求分析

我们已经对Nginx服务器配置文件的结构和涉及的基本指令有了基本了解。通过合理配置基本指令,我们可以让一台Nginx服务器正常工作,提供基本的web服务器功能


接下来我们将通过一个比较完整和简单的基础配置实例来巩固下前面所学习的指令及其配置,需求如下:

将访问URL中的127.0.0.1改成你的IP地址

访问URL对应文件
http://127.0.0.1:8081/server1/location1index_server1_location1.html
http://127.0.0.1:8081/server1/location2index_server1_location2.html
http://127.0.0.1:8082/server2/location1index_server2_location1.html
http://127.0.0.1:8082/server2/location2index_server2_location2.html
  • 如果访问的资源不存在,返回自定义的404页面
  • 将/server1和/server2的配置使用不同的配置文件分割,将两个配置文件放到/home/www/conf目录下,使用include指令进行合并,同时为/server1和/server2分别创建一个访问日志文件

4.2 准备工作

我们需要提前创建好对应的目录,准备好相应的的文件,整体的目录结构如下

tree /home/www

/home/www
├── conf
│ ├── server1.conf
│ └── server2.conf
├── script.sh
└── web
├── 404.html
├── server1
│ ├── location1
│ │ └── index_server1_location1.html
│ ├── location2
│ │ └── index_server1_location2.html
│ └── logs
│ └── access.log
└── server2
├── location1
│ └── index_server2_location1.html
├── location2
│ └── index_server2_location2.html
└── logs
└── access.log


在这里插入图片描述

4.2.1 创建www用户

我们创建一个新的www用户,并为www用户设置密码

sudo useradd www
sudo passwd www

默认情况下useradd命令会为用户自动创建一个家目录(/home/www

4.2.2 执行创建目录和创建文件的脚本

/home/www目录下创建一个名为script.sh的脚本文件

touch /home/www/script.sh

使用vim编辑器打开脚本文件,将以下内容粘贴到script.sh脚本文件中(可以不用先创建脚本文件,直接使用vim编辑器打开脚本文件,如果文件不存在vim编辑器会自动创建)

记得将127.0.0.1改成你的服务器的IP地址(第113行和第138行)

#!/bin/bashmkdir -p /home/www/web/server1/location1
mkdir -p /home/www/web/server1/location2
mkdir -p /home/www/web/server1/logs
touch /home/www/web/server1/logs/access.log
mkdir -p /home/www/web/server2/location1
mkdir -p /home/www/web/server2/location2
mkdir -p /home/www/web/server2/logs
touch /home/www/web/server2/logs/access.log
mkdir -p /home/www/confecho '<!DOCTYPE html>
<html>
<head><title>Server1 Location1</title>
</head>
<body><h1>Welcome to Server1 Location1</h1>
</body>
</html>' > /home/www/web/server1/location1/index_server1_location1.htmlecho '<!DOCTYPE html>
<html>
<head><title>Server1 Location2</title>
</head>
<body><h1>Welcome to Server1 Location2</h1>
</body>
</html>' > /home/www/web/server1/location2/index_server1_location2.htmlecho '<!DOCTYPE html>
<html>
<head><title>Server2 Location1</title>
</head>
<body><h1>Welcome to Server2 Location1</h1>
</body>
</html>' > /home/www/web/server2/location1/index_server2_location1.htmlecho '<!DOCTYPE html>
<html>
<head><title>Server2 Location2</title>
</head>
<body><h1>Welcome to Server2 Location2</h1>
</body>
</html>' > /home/www/web/server2/location2/index_server2_location2.htmlecho '<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>404 - Page Not Found</title><style>body {font-family: Arial, sans-serif;background-color: #f4f4f4;color: #333;display: flex;justify-content: center;align-items: center;height: 100vh;margin: 0;}.container {text-align: center;background: #fff;padding: 2rem;border-radius: 8px;box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);}h1 {color: #e74c3c;font-size: 4rem;margin-bottom: 1rem;}p {font-size: 1.2rem;margin-bottom: 2rem;}a {display: inline-block;padding: 10px 20px;background-color: #3498db;color: #fff;text-decoration: none;border-radius: 5px;transition: background-color 0.3s ease;}a:hover {background-color: #2980b9;}</style>
</head>
<body><div class="container"><h1>404</h1><p>Oops! The page you are looking for does not exist.</p><a href="/">Go Back Home</a></div>
</body>
</html>
' > /home/www/web/404.htmlecho 'server {# 配置监听端口和主机名称listen 8081;server_name 127.0.0.1;# 配置请求处理日志存放路径access_log /home/www/web/server1/logs/access.log server1;# 配置错误页面error_page 404 /404.html;# 配置处理/server1/location1请求的locationlocation /server1/location1 {root /home/www/web;index index_server1_location1.html;}# 配置处理/server1/location2请求的locationlocation /server1/location2 {root /home/www/web;index index_server1_location2.html;}# 配置错误页面转向location = /404.html {root /home/www/web;index 404.html;}
}' > /home/www/conf/server1.confecho 'server {# 配置监听端口和主机名称listen 8082;server_name 127.0.0.1;# 配置请求处理日志存放路径access_log /home/www/web/server2/logs/access.log server2;# 配置错误页面,对404.html做了定向配置error_page 404 /404.html;# 配置处理/server2/location1请求的locationlocation /server2/location1 {root /home/www/myweb;index index_server2_location1.html;}# 配置处理/server2/location2请求的locationlocation /server2/location2 {root /home/www/web;index index_server2_location2.html;}# 配置错误页面转向location = /404.html {root /home/www/web;index 404.html;}
}
' > /home/www/conf/server2.conf

接着为脚本文件赋予执行权限

chmod +x /home/www/script.sh

运行以下指令运行脚本

/home/www/script.sh

4.3 修改nginx的配置文件

在nginx的配置文件(nginx.conf)的http模块中添加以下内容

# 配置请求处理日志格式
log_format server1 '==========Server1 access log==========';
log_format server2 '==========Server2 access log==========';include /home/www/conf/*.conf;

4.4 开放防火墙端口

  1. 如果你使用的是云服务器,在安全组中放行 8081 端口 和 8082 端口
  2. 如果你安装了宝塔,除了在安全组中放行 8081 端口 和 8082 端口,可能还要在宝塔中放行 8081 端口 和 8082 端口

4.5 访问测试

浏览器访问以下网址,将127.0.0.1改成你的服务器的IP地址

http://127.0.0.1:8081/server1/location1/

在这里插入图片描述


浏览器访问以下网址,将127.0.0.1改成你的服务器的IP地址

http://127.0.0.1:8081/server1/location3/

在这里插入图片描述


http://www.hkcw.cn/article/oaRHnmaAOe.shtml

相关文章

印军高层被追问是否与巴方会面 印空军将领打马虎眼

印巴停火协议签署后,两国都在宣称自己取得了胜利。然而,印度军方的表现却让人失望。5月11日,印度空军中将巴蒂召开记者会,面对记者们的追问,他声称印度空军在这次冲突中表现出色,并坚称打下了好几架巴基斯坦飞机。但当被问及具体数字时,他却表示“不想冒险猜测”,并解释…

大V:辽宁舰率海军最强编队驶入西太 展现惊人实力

自去年10月在南海与山东舰稍微展示了一下双航母的实力后,辽宁舰到今年5月中旬都没有什么动作,大家的目光都放在了更出色的山东舰和福建舰上。然而,辽宁舰在5月下旬南下西太平洋,展示了强大的实力。护航编队包括两艘055型驱逐舰、五艘052D型驱逐舰和三艘054A型护卫舰,再加上…

印度刚喊话巴基斯坦,转头联合蒙古军演?背后算盘藏不住了!

印度最近的一系列举动引起了广泛关注。不久前,印度还在与巴基斯坦紧张对峙,并放狠话威胁对方,紧接着又派了一个大型商业代表团访问台湾。更令人意外的是,印度现在绕过中国,直接与蒙古国进行联合军事演习。这种行为就像是小孩子打架,正面打不过就绕到背后捅手指头。然而,…

25艘龙船巡游广州荔湾湖 展现广府龙舟文化魅力

5月31日,第十五届“荔枝湾新西关”民俗文化活动“五月五龙船鼓”在广州荔湾湖公园盛大开幕。上午8时30分,十多艘来自南海盐步、坑口、茶滘等地的龙船装饰一新,从珠江口岸徐徐进入荔湾湖面,与泮塘村的龙船一同趁景。泮塘村的龙船作为东道主,率先引领着各兄弟村的龙船队伍绕…

河南鹤壁一水库水位下降现千佛石窟 千年佛像重见天日

近日,有网友发布视频显示,河南省鹤壁市淇县夺丰水库水位下降后,露出一处石洞。这处石洞虽然洞口不大,但内部却别有洞天,四周布满佛像,造型精细,栩栩如生。洞内还有较深的积水。不少网友称这个洞为千佛洞,并有人前来打卡。该石窟名为前嘴石窟,开凿于东魏时期,千百年来…

全世界都在划龙舟过端午 全球共庆文化盛宴

当农历五月的暖风拂过东亚的稻田,粽叶的清香飘荡在东南亚的街巷,龙舟的鼓点响彻欧美的河流,全世界共同庆祝源自中国的古老节日——端午节。这个绵延两千多年的传统节日,早已超越地域界限,成为人类共享的文化盛宴。在中国,从江南水乡到北国平原,家家户户清晨便飘起蒸煮粽…

美禁运C919发动机 破局之道在哪里 核心技术自主可控

没有发动机,中国的大飞机还能飞吗?当美国突然暂停向中国商飞出售航空发动机技术时,这个问题迅速引起广泛关注。西方媒体纷纷唱衰“C919即将搁浅”,而中国外交部则强硬回击,坚决反对这种恶意封锁。这场看似突如其来的问题,实际上揭示了中美科技竞争的深层次矛盾——中国航…

python调用C++ DLL

使用C创建动态链接库&#xff1a; dllmain.cpp #include <windows.h> #include <string> #include <vector> #include "opencv2/opencv.hpp"BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) {return TRUE…

多米尼加坍塌事故死亡人数升至234人 全国哀悼日持续六天

当地时间5月31日,多米尼加医疗中心报告称,一名在俱乐部屋顶坍塌事故中的重症患者不幸去世,使得该事故的死亡人数上升至234人。这起事故发生在4月8日凌晨,地点是多米尼加首都圣多明各的一家俱乐部。当时俱乐部内正在举行知名歌手的演出,突然倒塌的屋顶导致许多人被埋在废墟…

姜广涛仅剩光合积木一家公司存续 配音演员告别引发关注

5月31日,多名配音演员宣布离开光合积木,未来将以自由人的身份继续参与配音工作,但与光合积木仍会保持项目上的合作。姜广涛也发文表示自己仍在学习的路上,并祝愿同事们在配音道路上继续前行,开启新的篇章。企查查数据显示,姜广涛目前仅关联一家存续状态的企业——北京光合…

刘楚昕称请允许我暂时沉默 获奖感言感动无数人

近日,作家刘楚昕创作的小说《泥潭》获漓江文学奖虚构类奖,获奖感言回忆去世女友感动无数人。刘楚昕通过漓江文学节官方微博写信回应网友:请允许我暂时沉默。责任编辑:0764

以媒:援助混乱凸显加沙居民困境 人道主义的讽刺剧

这年头的人道主义救援似乎充满了各种弯弯绕绕。加沙南部拉法的物资分发现场,表面上宣称要发出46.2万份食品包,沙特和阿联酋出钱,以色列做东,但实际上大部分实际受援的人被排除在外。联合国和老牌援助组织被排挤,分发权交给了私人企业和美国雇佣军。这种操作让人怀疑其真实…

我眼中技术文档的演进图谱:从windows开发手册到 AI 智能体的知识传承

-----一位25年的技术亲历者的时代观察 序 2000 年毕业进入科研所时&#xff0c;我未曾想过 CRT 显示器与泛黄的《Windows 宝典》会成为技术启蒙的坐标。从调试 MFC 控件的桌面开发起步&#xff0c;到 Web1.0 时代与 IE6 兼容性博弈的战术文档&#xff0c;再到 Kubernetes 部…

AI重塑银行客户服务:洞察呼叫中心与CRM的智能化变革

摘要: 随着银行业数字化转型的浪潮奔涌向前,人工智能(AI)正以前所未有的深度和广度渗透至客户服务的核心地带——呼叫中心与客户关系管理(CRM)系统。这不仅是一场技术革新,更是一场围绕客户体验、运营效率和业务增长的战略升级。本文将剖析AI在银行呼叫中心与CRM中的典型…

巴啦啦小魔仙凌妈妈曝片酬:1500一天 童年回忆再聚首

《巴啦啦小魔仙》中的凌妈妈和凌爸爸在时隔17年后重聚,两人的变化不大,依然显得年轻。网友们纷纷表示,仿佛看到了自己的童年电子爸妈合体。凌妈妈的扮演者左左感慨时间飞逝,尽管多年未拍戏,但她对自己能留下这样一个经典角色感到满足。他们还透露了当年拍摄时的片酬情况,…

李昀锐关晓彤《耀眼》捂眼路透 甜蜜互动引爆网络

近日,一组李昀锐与关晓彤在拍摄现场的路透照片在网络上引起热议。照片中,关晓彤身穿浅蓝色连衣裙,突然伸手捂住李昀锐的眼睛,后者嘴角微扬的瞬间被镜头捕捉,青春气息十足。这组被称为“捂眼路透”的未公开剧照在社交平台迅速传播,相关话题阅读量已突破3亿。两人正在合作拍…

市民称在周大福买到假金项链 送修发现材质异常

5月29日,张女士称她在2020年于贵安奥特莱斯购物广场的周大福门店购买了两条金项链。今年4月,她将这两条项链送至东百中心周大福门店进行保养和修复时,发现链子过火后发黑。经鉴定确认并非黄金材质。张女士要求退货并按照“假一赔三”标准赔偿,但至今未获解决。东百中心周大…

吴宣仪喜欢听话不乱闹的粉丝 积极支持朋友

吴宣仪在评区回复粉丝对自己在《浪姐》的助战嘉宾选了刘宇的不满,让大家不要把私欲加到她身上,她的朋友来应该热烈欢迎,她喜欢积极听话不乱闹的粉丝责任编辑:0882

省纪委回应县委书记建豪华厕所 劳民伤财“形象工程”

刚摘掉深度贫困县的帽子,时任县委书记李德明就斥资上千万元,建了10个豪华水冲公厕。日前,吉林省纪委监委公开通报了4起形式主义、官僚主义典型问题,其中提到省农业农村厅原厅长、白城市通榆县委原书记李德明搞劳民伤财的“形象工程”。2023年,李德明升任省农业农村厅厅长,…

外卖骑手们的“流量”副业 解锁隐藏赚钱技能

送外卖只能赚辛苦钱?凌晨3点,95后骑手小林在朋友圈晒出上月收入截图——1.8万,评论区瞬间炸锅。当同行还在为单价下跌焦虑时,他已悄悄解锁了骑手职业的“隐藏副本”。跨平台接单是资深骑手的黄金组合。北京骑手老张透露:“利用美团午高峰、饿了么晚高峰和闪送夜间急单,单…