从零开始的云计算生活——第二十一天,高山流水,HTTP与NGINX部署配置

目录

一.故事剧情

二.HTTP简单介绍

1.URI与URL

2.http的成长

a.HTTP/0.9(1991年):雏形初现​

b.HTTP/1.0(1996年):基础框架成型​

c.HTTP/1.1(1997-1999年):标准化与性能优化​

d.HTTP/2(2015年):性能飞跃​

e.HTTP/3(2022年标准化):QUIC革命​

 3.网站的组成

1. 基础设施层​

2. 前端(用户界面层)​​

​3. 后端(业务逻辑层)​​

4.http状态码类别

5.cookie相关

a.概念

b.核心作用

c.简单工作原理

三.Nginx服务部署与配置

1.概述

1.1 Nginx 特点

1.2 Nginx 作用

1.3 Nginx工作原理

2.Nginx服务搭建

2.1 Ningx安装

2.2 编译安装

2.3 核心配置文件

nginx.conf配置文件详解

2.4nginx用法

 2.5 核心命令

2.6 Nginx信号

3.启用nginx(单站点配置)

4.虚拟机主机头配置

基于端口号

基于IP地址

基于域名

四、HTTPS访问配置[自签名]

4.1 SSL简介

4.2 SSL协议介绍

4.3 传输过程

4.5 OpenSSL介绍

4.6 HTTPS 工作流程

4.7 自签名证书

4.8 nginx配置SSL

五、 location配置

5.1 作用

5.2 匹配规则

5.3 匹配优先级

5.4 配置案例

六、rewrite配置

6.1 语法

6.2 可写入字段

6.3 配置案例

6.4 if 指令

6.5 autoindex

6.6 nginx配置中的常用变量

四.总结


一.故事剧情

今天开始新的模块,讲解Nginx服务,这个是非常常用的服务,它以其稳定性、丰富的特性集和低资源消耗而闻名,很关键

二.HTTP简单介绍

1.URI与URL

  • URI(Uniform Resource Identifier)​

    • 定义​:用于唯一标识互联网资源的字符串,可以是资源的名称、位置或两者结合。
    • 范围​:涵盖所有资源标识形式,包括URL​(定位资源)和URN​(通过名称标识资源,如urn:isbn:0451450523)。
    • 功能​:仅标识资源,不涉及访问方式(例如员工工号仅标识身份,不说明部门位置)。
  • URL(Uniform Resource Locator)​

    • 定义​:URI的子集,专门通过位置和访问协议定位资源。
    • 功能​:既标识资源,又提供获取方法(如协议、路径等)。
    • 示例​:https://www.example.com/index.html 指定了HTTP协议、服务器地址和文件路径。

URI格式:

URI的通用格式为:scheme:[//authority]path[?query][#fragment],具体分解如下:

  • Scheme(协议)​​:访问资源的协议(如httpftpmailto
  • Authority(权限)​​:包括主机名(域名/IP)、端口号(默认可省略,如HTTP默认为80)
  • Path(路径)​​:资源在服务器上的位置(如/path/to/resource
  • Query(查询)​​:附加参数,以?开头,键值对形式(如?id=123&lang=en
  • Fragment(片段)​​:指向资源内部锚点,以#开头(如#section1

区别:

特性​URI​URL​
​定义范围​广义资源标识符(含URL和URN)URI的子集,仅定位资源
​功能仅标识资源(如URN)标识+定位+提供访问方式
​是否可访问​ 不一定(如mailto:仅标识邮箱)总是可访问
​示例​urn:isbn:9780132350884(URN)http://example.com/about

关键结论​:

  • 所有URL都是URI,但URI不一定是URL(如URN是URI但不是URL)。
  • URL是“资源地址”,URI是“资源身份证”(可能包含地址或其他标识)

2.http的成长

a.HTTP/0.9(1991年):雏形初现

  • 设计目标​:仅支持超文本(HTML)传输,功能极简。
  • 核心特性​:
    • 单行协议:仅支持GET方法,如 GET /page.html
    • 无状态码/头部​:响应直接返回HTML内容,无元数据
    • 短连接​:每次请求后立即断开TCP连接
  • 局限性​:无法传输图片等非文本资源,无错误处理机制

b.HTTP/1.0(1996年):基础框架成型

  • 核心改进​:
    • 引入报文头(Header)​​:添加状态码(如200 OK)、内容类型(Content-Type)等元数据,支持多种文件传输(如脚本、图片)
    • 扩展方法​:新增HEADPOST方法
  • 未解决问题​:
    • 连接效率低​:默认每个请求需新建TCP连接(可通过Connection: Keep-Alive启用短时复用,但非标准)
    • 队头阻塞(Head-of-Line Blocking)​​:响应顺序必须严格匹配请求顺序

c.HTTP/1.1(1997-1999年):标准化与性能优化

  • 里程碑特性​:
    • 持久连接(Persistent Connection)​​:默认复用TCP连接,减少握手开销
    • 管道化(Pipelining)​​:允许连续发送多个请求(但响应仍需按序返回,未根治队头阻塞)
    • 分块传输(Chunked Encoding)​​:支持动态生成内容的分段传输
    • 虚拟主机(Host头)​​:单IP支持多域名托管
  • 影响​:成为此后15年的主流标准,奠定REST架构基础

d.HTTP/2(2015年):性能飞跃

  • 突破性创新​:
    • 二进制分帧​:替代文本协议,提升解析效率
    • 多路复用(Multiplexing)​​:单连接并行处理请求/响应,彻底解决队头阻塞
    • 头部压缩(HPACK)​​:减少冗余头部数据传输
    • 服务器推送(Server Push)​​:主动向客户端发送预测资源
  • 局限​:仍依赖TCP,丢包时所有流被阻塞

e.HTTP/3(2022年标准化):QUIC革命

  • 底层变革​:
    • 弃用TCP,改用QUIC协议​:基于UDP实现可靠传输,减少延迟
    • 解决TCP队头阻塞​:丢包仅影响单个流(Stream),而非整个连接
    • 0-RTT握手​:对已连接的服务端可跳过握手,加速首次请求
    • 内置加密(TLS 1.3)​​:默认强制加密,提升安全性

 3.网站的组成

一个完整的网站是由多个相互协作的技术模块和功能要素组成的复杂系统,其结构可分为以下核心组成部分:

1. 基础设施层

  • 域名(Domain Name)​
    网站的访问入口,如 example.com。需满足易记性、相关性(与品牌或业务关联)和唯一性
  • 主机(Web Hosting)​
    存储网站文件的服务器空间,根据需求选择类型:
    • 共享主机​:多网站共享资源,适合小型站点
    • VPS​:虚拟独立服务器,平衡性能与成本
    • 独立服务器​:独占硬件资源,适合高流量网站
  • 服务器配置
    包括操作系统(Linux/Windows)、网络设置(域名解析、HTTPS证书)、负载均衡等,确保稳定与安全

2. 前端(用户界面层)​

负责用户直接交互的视觉与交互设计,核心技术包括:

  • HTML​:定义网页结构(如文本、图片布局)
  • CSS​:控制样式(颜色、字体、响应式布局),适配不同设备
  • JavaScript​:实现动态交互(如表单验证、动画)
  • 框架与工具​:
    • Vue.js、React:构建复杂交互界面。
    • Bootstrap:快速实现响应式设计
  • 设计原则​:
    注重用户体验(UX)一致性、易用性,以及视觉设计(UI)的配色、排版与图像质量

3. 后端(业务逻辑层)​

处理用户请求、数据运算与存储,用户不可见但为核心引擎:

  • 编程语言​:
    • Python​(Django/Flask):简洁高效,适合快速开发
    • Java​(Spring):企业级应用,稳定性强
    • PHP​(Laravel):传统Web开发主流

     · 数据库​:

类型代表适用场景
关系型数据库MySQL、PostgreSQL需复杂查询(如电商订单)
非关系型数据库MongoDB、Redis高频读写(如实时日志)
  • API开发​:
    通过RESTful接口连接前后端,支持数据交换与第三方集成
  • 安全性​:
    防SQL注入、XSS攻击,采用HTTPS加密及JWT/OAuth认证

4.http状态码类别

 详细类别

状态码分类英文名称中文描述备注
1001xx(信息)Continue继续请求(客户端应继续发送请求体)用于分块传输
2002xx(成功)OK请求成功最常见状态码
2012xx(成功)Created资源创建成功常用于POST请求
2042xx(成功)No Content请求成功但无内容返回常用于DELETE操作
3013xx(重定向)Moved Permanently资源永久重定向需更新书签
3023xx(重定向)Found资源临时重定向不修改书签
3043xx(重定向)Not Modified资源未修改(利用缓存)需配合Last-Modified头使用
4004xx(客户端)Bad Request请求语法错误如JSON格式错误
4014xx(客户端)Unauthorized未授权(需身份验证)与403的区别见备注
4034xx(客户端)Forbidden禁止访问权限不足导致
4044xx(客户端)Not Found资源不存在最常见错误码
4054xx(客户端)Method Not Allowed请求方法不被允许如对GET接口使用POST
4084xx(客户端)Request Timeout请求超时客户端未及时响应
4294xx(客户端)Too Many Requests请求过多需实现限流策略
5005xx(服务器)Internal Server Error服务器内部错误需检查日志
5025xx(服务器)Bad Gateway网关错误上游服务无响应
5035xx(服务器)Service Unavailable服务不可用临时过载或维护
5045xx(服务器)Gateway Timeout网关超时上游服务响应超时

5.cookie相关

a.概念

Cookie 是服务器发送到用户浏览器的小型文本文件(通常 ≤4KB),以键值对(key=value)形式存储

b.核心作用

  • 会话管理​:保持用户登录状态(如存储 Session ID)
  • 个性化设置​:记忆语言偏好、主题等
  • 行为跟踪​:记录用户浏览路径、购物车商品等

c.简单工作原理

 客户端->>服务器: 首次请求(无 Cookie)
 服务器->>客户端: 响应头 Set-Cookie: id=xxx
 客户端->>服务器: 后续请求头 Cookie: id=xxx
 服务器->>客户端: 识别身份,返回个性化内容

三.Nginx服务部署与配置

1.概述

Nginx 是开源、高性能、高可靠的 Web服务器 和反向代理服务器,而且支持热部署,几乎可以做到 7 * 24 小时不间断运行,即使运行几个月也不需要重新启动,还能在不间断服务的情况下对软件版本进行热更新。性能是 Nginx 最重要的考量,其占用内存少、并发能力强、能支持高达 5w 个并发连接数,最重要的是, Nginx 是免费的并可以商业化,配置使用也比较简单。

1.1 Nginx 特点

  • 高并发、高性能;

  • 模块化架构使得它的扩展性非常好;

  • 异步非阻塞的事件驱动模型(epoll)这点和 Node.js 相似;

  • 相对于其它服务器来说它可以连续几个月甚至更长而不需要重启服务器使得它具有高可靠性;

  • 热部署、平滑升级;

  • 完全开源,生态繁荣。

1.2 Nginx 作用

  • http服务器。Nginx可以独立提供http服务。可做网页静态服务器。

  • 虚拟主机。可以实现在一台服务器虚拟出多个虚拟服务器。

  • 反向代理,负载均衡。当网站的访问量达到一定程度后,单台服务器不能满足用户的请求时,需要用多台服务器集群可以使用nginx做反向代理。并且多台服务器可以平均分担负载,不会应为某台服务器负载高宕机而某台服务器闲置的情况。

  • nginx 中也可以配置安全管理、比如可以使用Nginx搭建API接口网关,对每个接口服务进行拦截。

静态服务代理服务安全服务流行架构
浏览器缓存协议类型访问控制Nginx+PHP(Fastcgi_pass)LNMP
防资源盗用正向代理访问限制Nginx+Java(Proxy_Pass)LNMT
资源分类反向代理流量限制Nginx+Python(uwsgi_pass)
资源压缩负载均衡拦截攻击/
资源缓存代理缓存拦截异常请求/
跨域访问动静分离拦截SQL注入/

1.3 Nginx工作原理

Nginx 的核心工作流程是:​接收请求 → 映射配置 → 调用模块处理。其内核仅负责请求的初步路由,实际功能由模块实现

  1. 处理器模块(Handlers)​
    直接处理请求,生成响应内容(如返回静态文件或转发动态请求)
  2. 过滤器模块(Filters)​
    对处理器输出的内容进行修改(如压缩、重写HTML)
  3. 代理类模块(Proxies)​
    与后端服务(如FastCGI、上游服务器)交互,实现负载均衡和反向代理

Nginx 采用 ​Master 进程 + Worker 进程的双层结构

  • Master 进程
    • 不处理请求,仅管理 Worker 进程(启动、监控、重启)。
    • 响应外部信号(如 nginx -s reload 重载配置)
  • Worker 进程
    • 实际处理网络请求(默认为单线程,可配置多线程)。
    • 各 Worker 独立且平等,通过共享锁(accept_mutex)避免“惊群效应”(多个进程争抢同一连接)

2.Nginx服务搭建

2.1 Ningx安装

2.2 编译安装

正常如果失败,因为依赖没有安装,需要安装以下两个

yum install -y pcre-devel
yum install -y zlib-devel

2.3 核心配置文件

配置文件名称配置文件作用
fastcgi.conf此文件包含了FastCGI相关的配置,用于与FastCGI进程通信
fastcgi.conf.default此文件是fastcgi.conf的备份副本
fastcgi_params此文件包含了用于FastCGI的参数配置,包括fastcgi的传输协议、请求超时时间等
fastcgi_params.default此文件是fastcgi_params的备份副本
koi-utf此文件包含了UTF-8编码与KOI8-R编码之间的字符转换规则,用于处理中文文件名等问题
koi-win此文件包含了Windows系统的字符转换规则,用于处理Windows系统的文件名问题
mime.types此文件包含了Nginx支持的MIME类型配置,用于设置相应的Content-Type头
mime.types.default此文件是mime.types的备份副本
nginx.confNginx的主要配置文件,其中包含了所有全局配置和访问控制规则,作为Nginx服务器的入口文件
nginx.conf.default此文件是nginx.conf的备份副本
scgi_params此文件包含了用于SCGI协议的参数配置
scgi_params.default此文件是scgi_params的备份副本
uwsgi_params此文件包含了用于uWSGI协议的参数配置
uwsgi_params.default此文件是uwsgi_params的备份副本
win-utf此文件包含了Windows系统的字符转换规则,用于处理Windows系统的文件名问题
nginx.conf配置文件详解

##全局配置,对全局生效##
user  nobody nobody;  # 指定运行 Nginx 进程的用户为 nobody,组为nobody
pid /var/run/nginx.pid # master主进程的的pid存放在nginx.pid的文件
worker_processes  1;  # 指定 Nginx 启动的 worker 子进程数量。
#worker_processes auto; # 与当前cpu物理核心数一致
worker_rlimit_nofile 20480; # 指定 worker 子进程可以打开的最大文件句柄数。
worker_rlimit_core 50M; # 指定 worker 子进程异常终止后的 core 文件,用于记录分析问题。
working_directory /opt/nginx/tmp; # 存放目录
worker_priority -10; # 指定 worker 子进程的 nice 值,以调整运行 Nginx 的优先级,通常设定为负值,以优先调用 Nginx。
#Linux 默认进程的优先级值是120,值越小越优先;nice 定范围为 -20 到 +19 。
#应用的默认优先级值是120加上 nice 值等于它最终的值,这个值越小,优先级越高。
worker_shutdown_timeout 5s; #指定 worker 子进程优雅退出时的超时时间。
timer_resolution 100ms; #worker 子进程内部使用的计时器精度,调整时间间隔越大,系统调用越少,有利于性能提升;反之,系统调用越多,性能下降。
daemon on; # 指定 Nginx 的运行方式,前台还是后台,前台用于调试,后台用于生产。默认是on,后台运行模式。
error_log  logs/error.log;  # 错误日志文件路径

##events:配置影响 Nginx 服务器与用户的网络连接;##
events {
	use epoll;     # 使用epoll的I/O模型(如果你不知道Nginx该使用哪种轮询方法,会自动选择一个最适合你操作系统的)
    worker_connections  1024;  # 允许的最大并发连接数
    accept_mutex on; # 是否打开负载均衡互斥锁,默认是off关闭的,这里推荐打开
}
##http:配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置;##
http {
    include       mime.types;  # 包含 MIME 类型的定义,文件扩展名与类型映射表
    default_type  application/octet-stream;   # 默认文件类型
    default_type  application/octet-stream;  # 默认的 MIME 类型
    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;  # 访问日志文件及使用的日志格式
    sendfile       on;  # 启用零拷贝传输,高效传输模式
    tcp_nopush     on;  # 启用 TCP nopush 选项,减少网络报文段的数量
    keepalive_timeout  0;  # 禁用持久连接的超时时间
    keepalive_timeout  65;  # 保持存活连接的超时时间
    gzip  on;  # 开启 Gzip 压缩
    include /etc/nginx/conf.d/*.conf;   # 加载自定义配置项
    ##upstream:配置后端服务器具体地址,负载均衡配置不可或缺的部分。##
    upstream back_end_server{
  		server 192.168.71.152:8081 #定义后端web服务器节点
	}
    ##server:配置虚拟主机的相关参数,一个 http 块中可以有多个 server 块;每个nginx相当于一个虚拟服务器的地位。##
    server {
        listen       80;  # 监听端口 80
        server_name  localhost;  # 服务器名为 localhost
        charset koi8-r;  # 字符集设置为 koi8-r
        access_log  logs/host.access.log  main;  # 主机访问日志文件及使用的日志格式
        ##location:用于配置匹配的 uri ;##
        location / {
            root   html;  # 指定静态资源目录位置,它可以写在 http 、 server 、 location 等配置中。
            index  index.html index.htm;  # 默认的索引文件
            deny 172.168.22.11;   # 禁止访问的ip地址,可以为all
        	allow 172.168.33.44;# 允许访问的ip地址,可以为all
        }
        location /image {
  			alias /opt/nginx/static/image/;#它也是指定静态资源目录位置,使用alias末尾一定要添加 / ,只能写在 location 中。
		}
#当用户访问 www.jx.com/image/1.png 时,实际在服务器找的路径是 /opt/nginx/static/image/1.png
        error_page  404              /404.html;  # 设置 404 错误页面的位置为 /404.html
        error_page   500 502 503 504  /50x.html;  # 将服务器错误页面重定向到 /50x.html
        location = /50x.html {
            root   html;
        }
        location ~ \.php$ {
            proxy_pass   http://127.0.0.1;  # 将 PHP 脚本代理到监听在 127.0.0.1:80 上的 Apache 服务器
        }
        location ~ \.php$ {
            root           html;  # PHP 脚本位置
            fastcgi_pass   127.0.0.1:9000;  # 向 FastCGI 服务器传递 PHP 脚本
            fastcgi_index  index.php;  # 指定 FastCGI 服务器默认的脚本文件名
            fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;  # FastCGI 参数配置
            include        fastcgi_params;  # 包含 FastCGI 相关的参数配置
        }
        location ~ /\.ht {
            deny  all;  # 阻止访问 .htaccess 文件
        }
    }
    server {
        listen       8000;  # 监听端口 8000
        listen       somename:8080;  # 监听 somename:8080
        server_name  somename  alias  another.alias;  # 服务器名设置
        location / {
            root   html;  # 根目录位置为 html 文件夹
            index  index.html index.htm;  # 默认的索引文件
        }
    }
    server {
        listen       443 ssl;  # 启动在 443 端口,并开启 SSL
        server_name  localhost;  # 服务器名为 localhost
        ssl_certificate      cert.pem;  # SSL 证书文件
        ssl_certificate_key  cert.key;  # SSL 证书的私钥文件
        ssl_session_cache    shared:SSL:1m;  # 配置 SSL 会话缓存
        ssl_session_timeout  5m;  # SSL 会话缓存的超时时间设置为 5 分钟
        ssl_ciphers  HIGH:!aNULL:!MD5;  # 配置 SSL 加密算法
        ssl_prefer_server_ciphers  on;  # 优先使用服务器端的加密套件
        location / {
            root   html;  # 根目录位置为 html 文件夹
            index  index.html index.htm;  # 默认的索引文件
        }
    }
}

将配置文件的一些注释删除后

 之后进行软连接后,就可以使用nginx命令了

2.4nginx用法

选项 (Options):​

  • ​-?, ­h​ : 显示此帮助信息
  • ­-v​ : 显示版本信息并退出
  • ­-V​ : 显示版本信息及编译配置选项,然后退出
  • -​­t​ : 测试配置文件语法并退出
  • ­-T​ : 测试配置文件语法,转储配置内容并退出
  • ­-q​ : 在测试配置时禁止显示非错误信息
  • ­-s signal​ : 向主进程发送信号:stop (快速停止), quit (优雅退出), reopen (重新打开日志文件), reload (重载配置)
  • -​­p prefix​ : 设置路径前缀 (默认值:/usr/local/nginx/)
  • ­-e filename​ : 设置错误日志文件 (默认值:logs/error.log)
  • ­-c filename​ : 设置配置文件 (默认值:conf/nginx.conf)
  • ­-g directives​ : 在配置文件之外设置全局指令

 Nginx的所有编译选项及其功能说明

选项类别选项参数说明
帮助信息--help打印帮助信息
安装路径--prefix=PATH路径设置安装前缀目录
--sbin-path=PATH路径设置nginx二进制文件路径
--modules-path=PATH路径设置模块路径
--conf-path=PATH路径设置nginx.conf路径
--error-log-path=PATH路径设置错误日志路径
--pid-path=PATH路径设置nginx.pid路径
--lock-path=PATH路径设置nginx.lock路径
运行用户--user=USER用户名设置worker进程的非特权用户
--group=GROUP组名设置worker进程的非特权组
构建选项--build=NAME名称设置构建名称
--builddir=DIR目录设置构建目录
事件模块--with-select_module启用select模块
--without-select_module禁用select模块
--with-poll_module启用poll模块
--without-poll_module禁用poll模块
--with-threads启用线程池支持
--with-file-aio启用文件AIO支持
--without-quic_bpf_module禁用ngx_quic_bpf_module
HTTP模块--with-http_ssl_module启用HTTP SSL模块
--with-http_v2_module启用HTTP/2模块
--with-http_v3_module启用HTTP/3模块
--with-http_realip_module启用HTTP真实IP模块
--with-http_addition_module启用HTTP附加模块
--with-http_xslt_module启用HTTP XSLT模块
--with-http_xslt_module=dynamic启用动态HTTP XSLT模块
--with-http_image_filter_module启用HTTP图像过滤模块
--with-http_image_filter_module=dynamic启用动态HTTP图像过滤模块
--with-http_geoip_module启用HTTP GeoIP模块
--with-http_geoip_module=dynamic启用动态HTTP GeoIP模块
--with-http_sub_module启用HTTP替换模块
--with-http_dav_module启用HTTP WebDAV模块
--with-http_flv_module启用HTTP FLV模块
--with-http_mp4_module启用HTTP MP4模块
--with-http_gunzip_module启用HTTP解压缩模块
--with-http_gzip_static_module启用HTTP Gzip静态模块
--with-http_auth_request_module启用HTTP认证请求模块
--with-http_random_index_module启用HTTP随机索引模块
--with-http_secure_link_module启用HTTP安全链接模块
--with-http_degradation_module启用HTTP降级模块
--with-http_slice_module启用HTTP切片模块
--with-http_stub_status_module启用HTTP状态模块
禁用HTTP模块--without-http_charset_module禁用HTTP字符集模块
--without-http_gzip_module禁用HTTP Gzip模块
--without-http_ssi_module禁用HTTP SSI模块
--without-http_userid_module禁用HTTP用户ID模块
--without-http_access_module禁用HTTP访问模块
--without-http_auth_basic_module禁用HTTP基本认证模块
--without-http_mirror_module禁用HTTP镜像模块
--without-http_autoindex_module禁用HTTP自动索引模块
--without-http_geo_module禁用HTTP地理模块
--without-http_map_module禁用HTTP映射模块
--without-http_split_clients_module禁用HTTP分割客户端模块
--without-http_referer_module禁用HTTP引用模块
--without-http_rewrite_module禁用HTTP重写模块
--without-http_proxy_module禁用HTTP代理模块
--without-http_fastcgi_module禁用HTTP FastCGI模块
--without-http_uwsgi_module禁用HTTP uWSGI模块
--without-http_scgi_module禁用HTTP SCGI模块
--without-http_grpc_module禁用HTTP gRPC模块
--without-http_memcached_module禁用HTTP Memcached模块
--without-http_limit_conn_module禁用HTTP连接限制模块
--without-http_limit_req_module禁用HTTP请求限制模块
--without-http_empty_gif_module禁用HTTP空GIF模块
--without-http_browser_module禁用HTTP浏览器模块
--without-http_upstream_hash_module禁用HTTP上游哈希模块
--without-http_upstream_ip_hash_module禁用HTTP上游IP哈希模块
--without-http_upstream_least_conn_module禁用HTTP上游最少连接模块
--without-http_upstream_random_module禁用HTTP上游随机模块
--without-http_upstream_keepalive_module禁用HTTP上游保活模块
--without-http_upstream_zone_module禁用HTTP上游区域模块
Perl模块--with-http_perl_module启用HTTP Perl模块
--with-http_perl_module=dynamic启用动态HTTP Perl模块
--with-perl_modules_path=PATH路径设置Perl模块路径
--with-perl=PATH路径设置Perl二进制文件路径
HTTP临时文件--http-log-path=PATH路径设置HTTP访问日志路径
--http-client-body-temp-path=PATH路径设置HTTP客户端请求体临时文件路径
--http-proxy-temp-path=PATH路径设置HTTP代理临时文件路径
--http-fastcgi-temp-path=PATH路径设置HTTP FastCGI临时文件路径
--http-uwsgi-temp-path=PATH路径设置HTTP uWSGI临时文件路径
--http-scgi-temp-path=PATH路径设置HTTP SCGI临时文件路径
HTTP功能--without-http禁用HTTP服务器
--without-http-cache禁用HTTP缓存
邮件模块--with-mail启用邮件代理模块
--with-mail=dynamic启用动态邮件代理模块
--with-mail_ssl_module启用邮件SSL模块
--without-mail_pop3_module禁用邮件POP3模块
--without-mail_imap_module禁用邮件IMAP模块
--without-mail_smtp_module禁用邮件SMTP模块
流模块--with-stream启用TCP/UDP代理模块
--with-stream=dynamic启用动态TCP/UDP代理模块
--with-stream_ssl_module启用流SSL模块
--with-stream_realip_module启用流真实IP模块
--with-stream_geoip_module启用流GeoIP模块
--with-stream_geoip_module=dynamic启用动态流GeoIP模块
--with-stream_ssl_preread_module启用流SSL预读模块
--without-stream_limit_conn_module禁用流连接限制模块
--without-stream_access_module禁用流访问模块
--without-stream_geo_module禁用流地理模块
--without-stream_map_module禁用流映射模块
--without-stream_split_clients_module禁用流分割客户端模块
--without-stream_return_module禁用流返回模块
--without-stream_pass_module禁用流转发模块
--without-stream_set_module禁用流设置模块
--without-stream_upstream_hash_module禁用流上游哈希模块
--without-stream_upstream_least_conn_module禁用流上游最少连接模块
--without-stream_upstream_random_module禁用流上游随机模块
--without-stream_upstream_zone_module禁用流上游区域模块
其他模块--with-google_perftools_module启用Google性能工具模块
--with-cpp_test_module启用C++测试模块
外部模块--add-module=PATH路径启用外部模块
--add-dynamic-module=PATH路径启用动态外部模块
兼容性--with-compat动态模块兼容性
编译器选项--with-cc=PATH路径设置C编译器路径
--with-cpp=PATH路径设置C预处理器路径
--with-cc-opt=OPTIONS选项设置额外的C编译器选项
--with-ld-opt=OPTIONS选项设置额外的链接器选项
--with-cpu-opt=CPUCPU类型为指定CPU构建(值: pentium, pentiumpro等)
PCRE库--without-pcre禁用PCRE库
--with-pcre强制使用PCRE库
--with-pcre=DIR路径设置PCRE库源码路径
--with-pcre-opt=OPTIONS选项设置PCRE额外的构建选项
--with-pcre-jit使用PCRE JIT编译支持
--without-pcre2不使用PCRE2库
zlib库--with-zlib=DIR路径设置zlib库源码路径
--with-zlib-opt=OPTIONS选项设置zlib额外的构建选项
--with-zlib-asm=CPUCPU类型使用指定CPU优化的zlib汇编源码(值: pentium等)
原子操作库--with-libatomic强制使用libatomic_ops库
--with-libatomic=DIR路径设置libatomic_ops库源码路径
OpenSSL--with-openssl=DIR路径设置OpenSSL库源码路径
--with-openssl-opt=OPTIONS选项设置OpenSSL额外的构建选项
调试--with-debug启用调试日志

 2.5 核心命令

命令作用
systemctl enable nginx开机自动启动
systemctl disable nginx关闭开机自动启动
systemctl start nginx启动Nginx
systemctl stop nginx停止Nginx
systemctl restart nginx重启Nginx
systemctl reload nginx重新加载Nginx
systemctl status nginx查看 Nginx 运行状态
ps -elf | grep [n]ginx查看Nginx进程,但是不会显示grep本身的进程
kill -9 pid根据上面查看到的Nginx进程号,杀死Nginx进程,-9 表示强制结束进程
nginx -s reload向主进程发送信号,重新加载配置文件,热重启
nginx -s reopen重启 Nginx
nginx -s stop快速关闭
nginx -s quit等待工作进程处理完成后关闭
nginx -T查看当前 Nginx 最终的配置
nginx -t检查配置是否有问题
nginx -c configfilePath指定配置文件启动nginx

2.6 Nginx信号

信号名含义
stop直接停止
quit优雅的退出:有人在访问不会结束进程
reopen分割日志
reload重新加载配置文件
term快速停止nginx进程,可能会中断现有连接,与stop信号类似。
usr1重新打开日志文件,用于日志切割或日志重定向,与reopen信号类似。
usr2平滑地升级nginx可执行文件。
hup重新加载配置文件,优雅地应用新配置,与reload信号类似。
winch当nginx以master/worker工作模式运行时,重新生成worker进程以适应新的配置。
usr3向worker进程发送自定义信号。

3.启用nginx(单站点配置)

在网页输入网址得到如下界面

此时查看错误日志发现有两个报错,是因为没找到favicon.ico导致的,去那个文件中创建一个即可

此时再次进入网址就没有报错提示了

切换浏览器进入网址会有不同信息

在网址上输入不存在的路径会显示404界面

将配置文件nginx.conf中的404选项打开,然后可以对404界面进行编写

此时刷新404界面就会变成自己写入的图片(被下架了)

4.虚拟机主机头配置

基于端口号

先创建一个文件夹conf.d,并在nginx.conf中增加一句

创建web.conf文件,从nginx.conf中复制server那一段到这个文件中并修改

此时进入803端口就会显示

基于IP地址

再为网卡配置子接口

修改文件将端口号改为子网址

重启服务后,此时输入网址进入

基于域名

将文件中的域名修改

在把源文件中的localhost修改

在另一台主机中,修改/etc/hosts文件

然后访问

四、HTTPS访问配置[自签名]

4.1 SSL简介

SSL (Secure Sockets Layer)安全套接层。是由Netscape(网景)公司于1990年开发,用于保障Word Wide Web(WWW)通讯的安全。主要任务是提供私密性,信息完整性和身份认证。1994年改版为SSLv2,1995年改版为SSLv3.

TLS(Transport Layer Security)安全传输层协议,)用于在两个通信应用程序之间提供保密性和数据完整性。该标准协议是由IETF于1999年颁布,整体来说TLS非常类似SSLv3,只是对SSLv3做了些增加和修改。

4.2 SSL协议介绍

SSL是一个不依赖于平台和应用程序的协议,位于TCP/IP协议与各种应用层协议之间,为数据通信提高安全支持。

4.3 传输过程

  • 首先发送数字证书,获取到可信的public key。

  • 通过public key发送对称秘钥,接收方用私钥解密。

  • 通信双方使用仅仅对方可知的对称秘钥进行加密传输。

4.5 OpenSSL介绍

OpenSSL是一个实现安全套接字层的加密工具包,openssl程序是一个命令行工具,用于使用OpenSSL加密库的加密函数。它可以用于:

  • 创建和管理私钥、公钥和参数

  • 公钥密码操作

  • 创建X.509证书、CSR和CRT

  • 消息摘要的计算

  • 密码加密和解密

  • SSL/TLS客户端和服务器测试

  • 处理S/MIME签名或加密邮件

  • 时间戳请求、生成和验证

4.6 HTTPS 工作流程

  • 客户端(浏览器)访问 www.baidu.com 百度网站;

  • 百度服务器返回 HTTPS 使用的 CA 证书;

  • 浏览器验证 CA 证书是否为合法证书;

  • 验证通过,证书合法,生成一串随机数并使用公钥(证书中提供的)进行加密;

  • 发送公钥加密后的随机数给百度服务器;

  • 百度服务器拿到密文,通过私钥进行解密,获取到随机数(公钥加密,私钥解密,反之也可以);

  • 百度服务器把要发送给浏览器的内容,使用随机数进行加密后传输给浏览器;(对称加密)

  • 此时浏览器可以使用随机数进行解密,获取到服务器的真实传输内容。

4.7 自签名证书

生成私钥文件(包含公钥和私钥)

生成证书请求文件

生成证书

查看证书

再将生成的证书移动到/etc/pki/nginx(自己创建)

4.8 nginx配置SSL

去/etc/nginx/nginx.conf中最下边修改

测试登录

修改/usr/share/nginx/html/index.html

最上面修改标题

最下边可以修改网页内容

此时使用https登录会提示

此时点击高级,继续访问

安装需要的功能(需要自己下载依赖关系)make && make install,

进行软连接

 再去/usr/local/nginx/conf/nginx.conf中最下方取消注释

创建pki,并将之前的证书文件移动过来

此时启动nginx后,登录网址,https也可以登录

五、 location配置

5.1 作用

配置路径

location [ = | ~ | ~* | ^~ ] uri {
  ...
}
##在浏览器中输入的:http://www.jx.com/s?id=1&test=123,称作URL,即:统一资源定位符
##在WEB服务器中,对资源进行标识,URI,即统一资源标识符

写在server字段中。

5.2 匹配规则

  • = 精确匹配;

  • ~ 正则匹配,区分大小写;

  • ~* 正则匹配,不区分大小写;

  • ^~ 匹配到即停止搜索;

5.3 匹配优先级

= > ^~ > ~ > ~* > 不带任何字符 “/”。

5.4 配置案例

在location下新加一个文件a.html,当没有这个文件时访问会出现

此时创建该文件并输入hello,刷新后再次访问

再使用正则匹配图片格式,创建images文件夹并放入图片

此时访问即可得到文件中的图片

第三种访问bbs时会去匹配路径上的index文件,若bbs中没有,则会403

此时加入内容

1、location 中的反斜线,代表后面的名字是一个文件夹名

location /test {
  ...
}
##以上写法会优先查找目录,若目录不存在则查找同名文件 

location /test/ {
  ...
}

##这个写法则只会寻找目录

2、return

停止处理请求,直接返回响应码或重定向到其他 URL ;执行 return 指令后, location 中后续指令将不会被执行。

location / {
  return 404; # 直接返回状态码
}
 
location / {
  return 404 "pages not found"; # 返回状态码 + 一段文本
}
 
location / {
  return 302 http://192.168.71.152/bbs ; # 返回状态码 + 重定向地址
}
 
location / {
  return https://www.baidu.com ; # 返回重定向地址
}
 

此时进入就进入输入的网址

六、rewrite配置

根据指定正则表达式匹配规则,重写 URL 。应用场景: 新老域名的更替!!!

6.1 语法

rewrite 正则表达式 要替换的内容 [flag]; 

6.2 可写入字段

server、location、if

 rewirte /images/(.*\.jpg)$ /pic/$1; # $1是前面括号(.*\.jpg)的反向引用

flag 可选值的含义:

  • last: 重写后的 URL 发起新请求,再次进入 server 段,重试 location 的中的匹配;

  • break :直接使用重写后的 URL ,不再匹配其它 location 中语句;

  • redirect :返回 302 临时重定向;

  • permanent :返回 301 永久重定向。

6.3 配置案例

此时输入images未找到图片

加上文件名后,他先找到pics,然后到photos里,找到目标文件

###生产环境不能使用.*,表示匹配任意!!!
#解析:
#当访问 /s 时,会自动帮我们重定向到 https://www.baidu.com;
#当访问 192.168.71.149/images/1.jpg 时,第一步重写 URL 为 192.168.71.149/pics/kati.jpg ,找到 pics 的 location ,继续重写 URL 为 192.168.71.149/photos/kati.jpg ,找到 /photos 的 location 后,去 html/photos 目录下寻找 kati.jpg 静态资源。

6.4 if 指令

语法:if (condition) {...}

可写字段:server、location

此时使用火狐浏览器登录则看到Firefox,用谷歌浏览器则是Chrome

set $var value; #设置变量

condition 判断条件:

  • $variable 仅为变量时,值为空或以0开头字符串都会被当做 false 处理;

  • = 或 != 相等或不等;

  • ~ 正则匹配;

  • ! ~ 非正则匹配;

  • ~* 正则匹配,不区分大小写;

  • -f 或 ! -f 检测文件存在或不存在;

  • -d 或 ! -d 检测目录存在或不存在;

  • -e 或 ! -e 检测文件、目录、符号链接等存在或不存在;

  • -x 或 ! -x 检测文件可以执行或不可执行;

server {
  listen 8080;
  server_name www.britz.com;
  root /usr/share/nginx/html;
  location / {
    if ( $uri = "/images/" ){
      rewrite (.*) /pics/ break;
    }
  }
}
#当访问 www.britz.com/images/ 时,会进入 if 判断里面执行 rewrite 命令。

6.5 autoindex

当访问192.168.71.149/download/ 时,会把服务器 /usr/local/nginx/html/download/ 路径下的文件展示出来.

注意:不能在有混合业务的站点开启该功能,容易被攻击!

6.6 nginx配置中的常用变量

变量名含义
remote_add客户端IP地址
remote_port客户端端口
server_addr服务端IP地址
Server_port服务端端口
server_protocol服务端协议
binary_remote_addr二进制格式的客户端IP地址
connectionTCP连接的序号,递增
connection_requestTCP连接当前的请求数量
uri请求的URL,不包含参数
request ur请求的URL,包含参数
scheme协议名,http或https
request metho请求方法
request_length全部请求的长度,包含请求行、请求头、请求体
args全部参数字符串
arg_参数名获取特定参数值
is_argsURL中是否有参数,有的话返回?,否则返回空
query_string与args相同
host请求信息中的Host,如果请求中没有Host行,则在请求头中找,最后 使用nginx中设置的server_name。
http_user_agent用户访问方式
http_referer从哪些链接过来的请求
http_via每经过一层代理服务器,都会添加相应的信息
http_cookie获取用户cookie
request time处理请求已消耗的时间
https是否开启了https,是则返回on,否则返回空
request_filename磁盘文件系统待访问文件的完整路径
document_root由URI和root/alias规则生成的文件夹路径
limit_rate返回响应时的速度上限值

四.总结

本节主要是对nginx的安装部署和简单的使用,对于nginx的更多用法还在后面,尽情期待。


这次更新了https访问和location配置,rewrite配置的相关知识,通过对nginx.conf内容的增加来对网址的内容进行修改,熟练掌握流程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值