web服务之Nginx

web·服务之Nginx

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。


推荐:Linux运维老纪的首页,持续学习,不断总结,共同进步,活到老学到老
导航剑指大厂系列:全面总结 运维核心技术:系统基础、数据库、网路技术、系统安全、自动化运维、容器技术、监控工具、脚本编程、云服务等。
常用运维工具系列:常用的运维开发工具, zabbix、nagios、docker、k8s、puppet、ansible等
数据库系列:详细总结了常用数据库 mysql、Redis、MongoDB、oracle 技术点,以及工作中遇到的 mysql 问题等
懒人运维系列:总结好用的命令,解放双手不香吗?能用一个命令完成绝不用两个操作
数据结构与算法系列:总结数据结构和算法,不同类型针对性训练,提升编程思维,剑指大厂
非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨

博客目录
一.简单介绍
1.介绍
2.功能
3.安装步骤
二.常用命令
1.启动 nginx
2.停止 nginx
3.重启 nginx
4.重新加载配置
5.设置开机启动
6.关闭开机启动设置
7.检查配置是否正确
8.检查加载模块
9.重新加载
三.常见配置
1.配置目录
2.执行目录
3.站点目录
4.传输 dist
5.我的 nginx 配置
6.服务器
7.配置文件的优先级
8.websocket
9.设置超时时间
四.牛逼特性
1.域名配置
2.图片不展示
3.负载均衡
4.动静分离
5.正向代理
6.反向代理
7.root 和 alias 区别
8.proxy_pass
9.限流功能
五.配置 https
1.nginx 检查
2.上传证书
3.http 的配置
4.证书文件名称
5.https 的配置
6.验证
7.加载配置
8.查看日志
9.验证
六.docker 使用 nginx
1.安装步骤
2.启动命令
3.校验配置
4.指定启动
一.简单介绍
1.介绍
Nginx(发音为"engine x")是一款高性能、轻量级的开源 Web 服务器和反向代理服务器,它具有以下特点和功能:

高性能:Nginx 被设计为能够处理大量并发连接而不显著增加系统负担。它采用异步事件驱动的架构,可以有效地处理高流量的 Web 请求。
负载均衡:Nginx 支持负载均衡,可以将请求分发到多个后端服务器,以提高网站性能和可用性。
反向代理:Nginx 可以充当反向代理,将客户端请求转发到后端服务器,隐藏后端服务器的真实 IP 地址,增加安全性和可扩展性。
静态文件服务:Nginx 可以高效地提供静态文件(如 HTML、CSS、JavaScript、图像等)的服务,减轻应用服务器的负担。
SSL/TLS 支持:Nginx 支持加密通信,可以配置 SSL/TLS 来保护数据传输的安全性。
URL 重写:Nginx 允许对 URL 进行灵活的重写和转发,以实现友好的 URL 结构和路由。
缓存:Nginx 可以缓存静态内容和动态内容,提高响应速度并减轻后端服务器的负担。
访问控制:Nginx 可以实施访问控制、IP 黑名单、基本身份验证等安全性措施。
模块化架构:Nginx 使用模块化的架构,允许用户通过插件和模块来扩展其功能。
Nginx 通常被用于构建高性能的 Web 服务器环境,特别适合处理大流量的网站和应用。它在互联网上广泛使用,并已成为许多大型网站和应用的关键组件之一。

2.功能
以下是 Nginx 的一些主要功能:

Web 服务器: Nginx 可以作为一个快速、高性能的 Web 服务器,可以直接处理和提供静态和动态内容。

反向代理: Nginx 可以作为反向代理服务器,接收客户端请求并将其转发到后端服务器,用于负载均衡、缓存、SSL 终端等。

负载均衡: Nginx 可以将来自客户端的请求分发到多个后端服务器,实现负载均衡,提高应用的可扩展性和性能。

HTTP 缓存: Nginx 可以缓存静态和动态内容,减轻后端服务器的负载,提高响应速度。

SSL 终端: Nginx 可以处理 SSL/TLS 连接,用于终止和处理加密通信,减轻后端服务器的计算负担。

反向代理缓存: Nginx 可以作为反向代理缓存,将动态内容缓存到本地,减少对后端服务器的请求,提高响应速度。

动态内容处理: Nginx 可以处理 FastCGI、uWSGI、SCGI 等协议,用于处理动态内容如 PHP、Python、Ruby 等。

限流和速率控制: Nginx 可以实施请求速率控制和限流,以防止服务器过载。

安全性: Nginx 提供安全功能如防止恶意请求、DDoS 攻击防护等。

虚拟主机: Nginx 支持虚拟主机配置,可以在一个服务器上托管多个域名。

自定义模块: Nginx 支持自定义模块开发,可以根据需求添加自定义的功能和扩展。

事件驱动: Nginx 使用事件驱动的异步架构,可以处理大量并发连接,提供出色的性能。

日志记录: Nginx 可以记录详细的访问日志,方便监控和分析。

Nginx 是一个功能强大的服务器软件,适用于多种应用场景,如 Web 服务器、反向代理、负载均衡、缓存、安全保护等。它在大型互联网公司和企业中被广泛使用,提供了高性能和稳定性。

3.安装步骤
#查看nginx在哪
whereis nginx

#yum 安装ningx
#nginx添加yum repro库中
#下载nginx包
wget https://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

# 建立nginx的yum仓库
rpm -ivh nginx-release-centos-7-0.el7.ngx.noarch.rpm

#查看nginx的信息
yum info nginx

#查看yum源仓库中nginx版本
yum --showduplicates list nginx | expand

#安装nginx,默认安装最新的稳定版本 及 nginx 1.20.2
yum install nginx

#查看版本
nginx -V

#查看日志
tail -f /var/log/nginx/error.log

#配置文件地址
/etc/nginx/nginx.conf

二.常用命令
1.启动 nginx
#查看nginx位置
whereis nginx

#nginx可用
systemctl enable nginx

#启动nginx
systemctl start nginx

#查看进程号
netstat -nltp

#查看状态
systemctl status nginx

2.停止 nginx
#停止 nginx
systemctl stop nginx

3.重启 nginx
#重启 nginx
systemctl restart nginx

4.重新加载配置
#重新加载配置
systemctl reload nginx

5.设置开机启动
#设置开机启动
systemctl enable nginx

6.关闭开机启动设置
#关闭开机启动设置
systemctl disable nginx

7.检查配置是否正确
#检查配置是否正确(常用)
nginx -t

8.检查加载模块
./nginx -V

9.重新加载
#进入nginx可执行目录sbin下,输入命令,不用重启
./nginx -s reload

三.常见配置
Nginx 的主配置文件是 nginx.conf,这个配置文件一共由三部分组成,分别为全局块、events 块和 http 块。在 http 块中,又包含 http 全局块、多个 server 块。每个 server 块中,可以包含 server 全局块和多个 location 块。在同一配置块中嵌套的配置块,各个之间不存在次序关系。
1.配置目录
#从 / 根目录下查找文件名为 nginx.conf 的文件
find / -name nginx.conf
#从/etc 目录下查找文件名为 nginx.conf 的文件
find /etc -name nginx.conf
#检查配置文件
nginx -t
#目录
/etc/nginx

2.执行目录
/usr/sbin/nginx
1
3.站点目录
站点目录是配置的,根据配置文件来的
指定根目录
location / {
   root /usr/share/nginx/html;
   index index.html index.htm;
 }

root /usr/share/nginx/html; #就是站点目录
4.传输 dist
目录:
/usr/share/nginx/html
1
dist方式:
# 传输
scp /Users/qinyingjie/Downloads/000000-新空间/知识图谱/dist.zip root@47.104.164.9:/usr/share/nginx/html
# 解压
cd /usr/share/nginx/html
unzip dist.zip
# 移动
cd /usr/share/nginx/html/dist
sudo mv * /usr/share/nginx/html

非压缩文件:
# 源文件
scp -r /Users/qinyingjie/Downloads/dist/* root@47.104.164.9:/usr/share/nginx/html
1
2
5.我的 nginx 配置
server {
        listen       80;
        server_name  www.qinyingjie.top;
        root         /usr/share/nginx/html;
        include /etc/nginx/default.d/*.conf;
        location / {
               root   html;
              index  index.html index.htm;
               proxy_pass http://localhost:8080/;
           }
        location ~ .*\.(gif|jpg|jpeg|png|jfif)$ {
           root  /kwan/;
           autoindex    on ;
        }
        error_page 404 /404.html;
            location = /40x.html {
        }
        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
}
= :用于不含正则表达式的 uri 前,要求请求字符串与 uri 严格匹配,如果匹配成功,就停止继续向下搜索并立即处理该请求
~ :用于表示 uri 包含正则表达式,并且区分大小写
~* :用于表示 uri 包含正则表达式,并且不区分大小写
^~ :用于不含正则表达式的 uri 前,要求 Nginx 服务器找到标识 uri 和请求。字符串匹配度最高的 location 后,立即使用此 location 处理请求,而不再使用 location 块中的正则 uri 和请求字符串做匹配。
6.服务器
43.139.90.182 qinyingjie.top
1
7.配置文件的优先级
启动时可以指定配置文件
首先,说明结论:同一目录下存在多个配置文件时,Nginx是按照文件的名称先后顺序依次读取的!
#验证配置文件
/usr/local/nginx/sbin/nginx -tc /usr/local/nginx/conf/nginx.conf
/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
#指定配置文件启动
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
#指定配置文件重启
/usr/local/nginx/sbin/nginx -s reload -c /usr/local/nginx/conf/nginx.conf
#说明:-c 参数指定运行nginx系统的自定义配置文件。
#若加:使用自定义配置文件。
#若不加:使用默认的nginx.conf(一般位于/usr/local/conf/nginx.conf,具体以实际情况为准)
nginx -c /usr/local/nginx/conf/nginx.conf

8.websocket
要在 Nginx 中开通 WebSocket,需要在 Nginx 配置文件中添加相应的配置。
以下是一个简单的 Nginx 配置文件示例,其中开通了 WebSocket:
http {
    # ...
    map $http_upgrade $connection_upgrade {
        default upgrade;
        ''      close;
    }
    server {
        listen 80;
        server_name example.com;
        location /ws/ {
            proxy_pass http://backend_server/ws/;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
        }
    }
}
在这个配置文件中,map 指令用于将 HTTP 请求头中的 Upgrade 和 Connection 字段映射到 Nginx 的变量中,proxy_pass 指令用于将请求转发到后端服务器,proxy_http_version 指令用于指定使用 HTTP 1.1 协议进行转发,proxy_set_header 指令用于设置请求头字段。
具体来说,proxy_set_header Upgrade $http_upgrade; 指令用于将 HTTP 请求头中的 Upgrade 字段设置为 $http_upgrade 变量的值,proxy_set_header Connection $connection_upgrade; 指令用于将 HTTP 请求头中的 Connection 字段设置为 $connection_upgrade 变量的值。
这样,当客户端发送一个 WebSocket 请求时,Nginx 就会将其转发到后端服务器,并将请求头中的 Upgrade 和 Connection 字段设置为 WebSocket 需要的值,从而成功开通了 WebSocket。
9.设置超时时间
http {
  proxy_connect_timeout 300; #单位秒
    proxy_send_timeout 300; #单位秒
    proxy_read_timeout 300; #单位秒
    proxy_buffer_size 16k;
    proxy_buffers 4 64k;
    proxy_busy_buffers_size 128k;
    proxy_temp_file_write_size 128k;
}

四.牛逼特性
1.域名配置
server_name  www.qinyingjie.top;

2.图片不展示
location ~ .*\.(gif|jpg|jpeg|png|jfif)$ {
  proxy_pass https://www.qinyingjie.top;
  root /kwan/;
  autoindex on;
}

3.负载均衡
1.轮训
upstream open-api-test-category{
    server 10.250.16.111:8195;
    server 10.250.16.111:8196;
}
location / {
    proxy_pass http://open-api-test-category/;
}

2.权重
upstream open-api-test-category{
    server 10.250.16.111:8195 weight=1;
    server 10.250.16.111:8196 weight=3;
}
location / {
    proxy_pass http://open-api-test-category/;
}

3.hash
upstream open-api-test-category{
    server 10.250.16.111:8195;
    server 10.250.16.111:8196;
    ip_hash;
}
location / {
    proxy_pass http://open-api-test-category/;
}

4.动静分离
location ~ .*\.(gif|jpg|jpeg|png|jfif)$ {
    root   /kwan/ ;
    autoindex    on ;
}

5.正向代理
正向代理是代理服务器位于客户端和目标服务器之间的一种代理方式。
客户端请求发送到正向代理服务器,然后由代理服务器将请求转发到目标服务器。
正向代理隐藏了客户端的真实 IP 地址,使目标服务器只能看到代理服务器的 IP 地址。
正向代理通常用于访问被封锁或受限制的内容,或者用于增加安全性和隐私。
比如 VPN,原理就是使用了正向代理,隐藏了客户端的信息。
6.反向代理
反向代理是代理服务器位于目标服务器和客户端之间的一种代理方式。
客户端将请求发送到反向代理服务器,然后代理服务器根据规则将请求转发给后端的目标服务器。
反向代理隐藏了目标服务器的真实 IP 地址,客户端只能看到代理服务器的 IP 地址。
反向代理通常用于负载均衡、缓存、安全性和高可用性方面,可以提高网站的性能和可靠性。
比如部署的服务,使用反向代理,隐藏服务端信息,避免被攻击。
location / {
    root   html;
    index  index.html index.htm;
    proxy_pass http://localhost:8080/;
}

后端接口反向代理:
location /newspace/ {
    proxy_pass http://127.0.0.1:8118; # 代理到本地地址
    proxy_set_header Host $host; # 设置代理请求的Host头
    proxy_set_header X-Real-IP $remote_addr; # 将客户端真实IP传递给后端
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 传递X-Forwarded-For头
    proxy_set_header X-Forwarded-Proto $scheme; # 传递请求使用的协议
    proxy_set_header Connection ""; # 连接头,防止后端关闭连接
    proxy_http_version 1.1; # 使用HTTP/1.1
    proxy_set_header Upgrade $http_upgrade; # 允许WebSockets
    proxy_set_header Connection "upgrade"; # 允许WebSockets
    proxy_read_timeout 86400; # 设置代理读超时
}

7.root 和 alias 区别
最基本的区别:alias 指定的目录是准确的,root 是指定目录的上级目录,并且该上级目录要含有 location 指定名称的同名目录。另外,根据前文所述,使用 alias 标签的目录块中不能使用 rewrite 的 break。
alias 虚拟目录配置中,location 匹配的 path 目录如果后面不带"/“,那么访问的 url 地址中这个 path 目录后面加不加”/“不影响访问,访问时它会自动加上”/“;
但是如果 location 匹配的 path 目录后面加上”/“,那么访问的 url 地址中这个 path 目录必须要加上”/“,访问时它不会自动加上”/“。如果不加上”/“,访问就会失败!
root 目录配置中,location 匹配的 path 目录后面带不带”/",都不会影响访问。
在 nginx 配置中的良好习惯是:
在 location /中配置 root 目录;
在 location /path 中配置 alias 虚拟目录。
#直观理解如下形式:
location /dev/{
    alias /web/dev/doc/; #这个查找文件的路径直接是/web/dev/doc/
}
location /dev/{
    root /web/dev/doc/; #这个查找文件的路径应该是/web/dev/doc/dev
}
# 这里使用root配置 如果访问 192.168.2.3/pak/a.html  则对应的路径为:/usr/local/pak/a.html
# 通过root配置则location配置的/pak/一定是要在root对应的/usr/local/目录下要有的目录

8.proxy_pass
结论:
如果 proxy_pass 末尾有斜杠/,proxy_pass 不拼接 location 的路径
如果 proxy_pass 末尾无斜杠/,proxy_pass 会拼接 location 的路径
1.proxy_pass 末尾有斜杠
location  /api/ {
    proxy_pass http://127.0.0.1:8000/;
}

请求地址:http://localhost/api/test
转发地址:http://127.0.0.1:8000/test
2.proxy_pass 末尾无斜杠
location  /api/ {
    proxy_pass http://127.0.0.1:8000;
}

请求地址:http://localhost/api/test
转发地址:http://127.0.0.1:8000/api/test
实战举例:
# http://47.104.164.9:8080/baselineApi/api/kg/all/triple
# https://meihua150.cn/baselineApi/api/kg/all/triple
location  /newspace/ {
    proxy_pass http://47.104.164.9:8128;
}

3.proxy_pass 包含路径,且末尾有斜杠
location  /api/ {
    proxy_pass http://127.0.0.1:8000/user/;
}

请求地址:http://localhost/api/test
转发地址:http://127.0.0.1:8000/user/test
4.proxy_pass 包含路径,末尾无斜杠
location  /api/ {
    proxy_pass http://127.0.0.1:8000/user;
}

请求地址:http://localhost/api/test
转发地址:http://127.0.0.1:8000/usertest
9.限流功能
nginx 提供了两种限流方式,
一种是限制请求速率
一种是限制连接数量
限制请求速率:nginx 的 ngx_http_limit_req_module 模块提供限制请求处理速率的能力,使用了漏桶算法(leaky bucket algorithm)。我们可以想像有一只上面进水、下面匀速出水的桶,如果桶里面有水,那刚进去的水就要存在桶里等下面的水流完之后才会流出,如果进水的速度大于水流出的速度,桶里的水就会满,这时水就不会进到桶里,而是直接从桶的上面溢出。对应到处理网络请求,水代表从客户端来的请求,而桶代表一个队列,请求在该队列中依据先进先出(FIFO)算法等待被处理。漏的水代表请求离开缓冲区并被服务器处理,溢出代表了请求被丢弃并且永不被服务。
漏桶算法
limit_req_zone $binary_remote_addr zone=mylimit:10m rate=2r/s;
server {
    location ~* \.(html)$ {
        limit_req zone=mylimit;
    }
}
limit_req_zone 用于设置限流和共享内存区域的参数,格式为:limit_req_zone key zone rate。
key:定义限流对象,$binaryremote_addr 是 nginx 中的变量,表示基于 remote_addr(客户端 IP) 来做限流,binary 是二进制存储。使用 $binary_remote_addr 而不是 $remote_addr 是因为二进制存储可以压缩内存占用量。 $remote_addr 变量的大小从 7 到 15 个字节不等,而 $binary_remote_addr 变量的大小对于 IPv4 始终为 4 个字节,对于 IPv6 地址则为 16 个字节。
zone:定义共享内存区来存储访问信息,访问信息包括每个 IP 地址状态和访问受限请求 URL 的频率等。zone 的定义又分为两个部分:由 zone= 关键字标识的区域名称,以及冒号后面的区域大小。myLimit:10m 表示一个大小为 10M,名字为 myLimit 的内存区域。1M 能存储 16000 个 IP 地址的访问信息,myLimit 大概可以存储约 160000 个地址。nginx 创建新记录的时候,会移除前 60 秒内没有被使用的记录,如果释放的空间还是存储不了新的记录,会返回 503 的状态码。
rate:设置最大的访问速率。rate=2r/s(为了好模拟,rate 设置的值比较小),表示每秒最多处理 2 个请求。事实上 nginx 是以毫秒为粒度追踪请求的,rate=2r/s 实际上是每 500 毫秒 1 个请求,也就是说,上一个请求完成后,如果 500 毫秒内还有请求到达,这些请求会被拒绝(默认返回 503,如果想修改返回值,可以设置 limit_req_status)。
limit_req_zone 只是设置限流参数,如果要生效的话,必须和 limit_req 配合使用。limit_req 的格式为:limit_req zone=name [burst=number] [nodelay]。
上面的例子只简单指定了 zone=mylimit,表示使用 mylimit 这个区域的配置,在请求 html 文件时进行限流。我们可以理解为这个桶目前没有任何储存水滴的能力,到达的所有不能立即漏出的请求都会被拒绝。如果我 1 秒内发送了 10 次请求,其中前 500 毫秒 1 次,后 500 毫秒 9 次,那么只有前 500 毫秒的请求和后 500 毫秒的第一次请求会响应,其余请求都会被拒绝。
limit_req_zone $binary_remote_addr zone=mylimit:10m rate=2r/s;
server {
    location ~* \.(html)$ {
        limit_req zone=mylimit burst=5;
    }
}

burst 表示在超过设定的访问速率后能额外处理的请求数。当 rate=2r/s 时,表示每 500ms 可以处理一个请求。burst=5 时,如果同时有 10 个请求到达,nginx 会处理第 1 个请求,剩余 9 个请求中,会有 5 个被放入队列,剩余的 4 个请求会直接被拒绝。然后每隔 500ms 从队列中获取一个请求进行处理,此时如果后面继续有请求进来,如果队列中的请求数目超过了 5,会被拒绝,不足 5 的时候会添加到队列中进行等待。我们可以理解为现在的桶可以存 5 滴水:
limit_req_zone $binary_remote_addr zone=mylimit:10m rate=2r/s;
server {
    location ~* \.(html)$ {
        limit_req zone=mylimit burst=5 nodelay;
    }
}
nodelay 表示不延迟。设置 nodelay 后,第一个到达的请求和队列中的请求会立即进行处理,不会出现等待的请求。需要注意的是,虽然队列中的 5 个请求立即被处理了,但是队列中的位置依旧是按照 500ms 的速度依次被释放的。后面的 4 个请求依旧是被拒绝的,长期来看并不会提高吞吐量的上限,长期吞吐量的上限是由设置的 rate 决定的。
nginx 限流使用了令牌桶算法:
漏桶算法和令牌桶算法都是用于实现流量控制和限流的算法,但它们的原理和适用场景略有不同。
漏桶算法: 漏桶算法模拟了一个漏桶,请求被认为是水滴,以固定的速率流出(漏出)系统。如果流入的请求速率超过了漏桶的容量,多余的请求将会被丢弃或者等待下一个时间段。漏桶算法适用于平滑流量,防止系统被大量突发流量压垮。但是,对于短时间内的突发流量,漏桶算法并不是特别有效,因为它无法快速处理瞬时大量的请求,而只能以固定的速率处理。
令牌桶算法: 令牌桶算法也是一种流量控制算法,它基于一个令牌桶的概念。令牌以一定的速率被添加到桶中,每个请求在处理之前需要获取一个令牌,如果没有可用的令牌,则请求将被暂时阻塞或丢弃。令牌桶算法可以适应瞬时的突发流量,因为当桶中积累足够多的令牌时,可以快速处理突发请求,而不会受限于固定的速率。这使得令牌桶算法更适合处理突发流量的情况。
所以,总的来说,漏桶算法更适合平滑流量,而令牌桶算法更适合应对突发流量。在实际应用中,可以根据需求选择合适的算法来实现流量控制和限流。
五.配置 https
1.nginx 检查
nginx -V
1
2.上传证书
# crt文件
scp  /Users/qinyingjie/Downloads/01-新空间/99-新空间/meihua150.cn_1716275957/meihua150.cn.crt  root@47.104.164.9:/etc/nginx
# key文件
scp  /Users/qinyingjie/Downloads/01-新空间/99-新空间/meihua150.cn_1716275957/meihua150.cn.key  root@47.104.164.9:/etc/nginx

3.http 的配置
# For more information on configuration, see:
#   * Official English Documentation: http://nginx.org/en/docs/
#   * Official Russian Documentation: http://nginx.org/ru/docs/
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;
events {
    worker_connections 1024;
}
http {
    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  /var/log/nginx/access.log  main;
    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;
    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;
    # Load modular configuration files from the /etc/nginx/conf.d directory.
    # See http://nginx.org/en/docs/ngx_core_module.html#include
    # for more information.
    include /etc/nginx/conf.d/*.conf;
    server {
        listen       80;
        server_name  wwww.qinyingjie.top;
        root         /usr/share/nginx/html;
        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;
        location / {
           root   html;
           index  index.html index.htm;
           proxy_pass http://127.0.0.1:8080/;
           }
        location ~ .*\.(gif|jpg|jpeg|png|jfif|webp)$ {
             root  /kwan/;
                 autoindex    on ;
        }
        error_page 404 /404.html;
            location = /40x.html {
        }
        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }
}
4.证书文件名称
www.qinyingjie.top_bundle.crt
www.qinyingjie.top.key
meihua150.cn.crt
meihua150.cn.key
域名:
meihua150.cn

#请填写绑定证书的域名
server_name meihua150.cn;
#把http的域名请求转成https
return 301 https://$host$request_uri;

5.https 的配置
# For more information on configuration, see:
#   * Official English Documentation: http://nginx.org/en/docs/
#   * Official Russian Documentation: http://nginx.org/ru/docs/
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;
events {
    worker_connections 1024;
}
http {
    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  /var/log/nginx/access.log  main;
    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;
    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;
    # Load modular configuration files from the /etc/nginx/conf.d directory.
    # See http://nginx.org/en/docs/ngx_core_module.html#include
    # for more information.
    include /etc/nginx/conf.d/*.conf;
    server {
       listen 80;
       #请填写绑定证书的域名
       server_name www.qinyingjie.top;
       #把http的域名请求转成https
       return 301 https://$host$request_uri;
    }
    server {
     #SSL 默认访问端口号为 443
     listen 443 ssl;
     #请填写绑定证书的域名
     server_name www.qinyingjie.top;
     #请填写证书文件的相对路径或绝对路径
     ssl_certificate  www.qinyingjie.top_bundle.crt;
     #请填写私钥文件的相对路径或绝对路径
     ssl_certificate_key www.qinyingjie.top.key;
     ssl_session_timeout 5m;
     #请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。
     ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
     #请按照以下协议配置
     ssl_protocols TLSv1.2 TLSv1.3;
     ssl_prefer_server_ciphers on;
     location / {
       #网站主页路径。此路径仅供参考,具体请您按照实际目录操作。
       #例如,您的网站主页在 Nginx 服务器的 /etc/www 目录下,则请修改 root 后面的 html 为 /etc/www。
       root html;
       index index.html index.htm;
       proxy_pass http://127.0.0.1:8080/;
     }
     location ~ .*\.(gif|jpg|jpeg|png|jfif|webp)$ {
       root  /kwan/;
       autoindex    on ;
     }
    }
}

6.验证
#检查配置是否正确(常用)
nginx -t

7.加载配置
nginx -s reload
8.查看日志
#全局查看
cat  /var/log/nginx/error.log
#尾部查看
tail -f  /var/log/nginx/error.log

9.验证
https://meihua150.cn
http://meihua150.cn

六.docker 使用 nginx
1.安装步骤
#查找nginx
docker search nginx
#下载镜像
docker pull nginx:latest
#查看本地镜像
docker images
#运行容器
docker run --name nginx-test -p 8080:80 -d nginx
参数说明:
--name nginx-test:容器名称。
-p 8080:80: 端口进行映射,将本地 8080 端口映射到容器内部的 80 端口。
-d nginx: 设置容器在在后台一直运行。
#访问是否成功
127.0.01:8080

2.启动命令
#启动nginx,并挂在配置文件目录到宿主机
docker run -d --name deepexi-belle-damo-nginx \
--privileged=true \
--dns 114.114.114.114 \
-p 80:80  \
-v /etc/nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf \
--restart=always deploy.deepexi.com/datasense-test/deepexi-belle-damo-nginx:v1.0.0

3.校验配置
docker 启动的 nginx,校验 nginx 的配置文件是否正确
docker exec -it nginx nginx -t
1
4.指定启动
容器启动 nginx
#启动nginx,并挂在配置文件目录到宿主机
docker run -d --name deepexi-belle-damo-nginx --privileged=true --dns 114.114.114.114 -p 80:80  \
-v /etc/nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf \
 --restart=always deploy.deepexi.com/datasense-test/deepexi-belle-damo-nginx:v1.0.0
————————————————
觉得有用的话点个赞 👍🏻 呗。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄
💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍
🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

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

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

相关文章

将IConfiguration对象转换成一个具体的对象,以面向对象的方式来使用配置

我们倾向于将IConfiguration对象转换成一个具体的对象,以面向对象的方式来使用配置,我们将这个转换过程称为配置绑定。除了将配置树叶子节点配置节的绑定为某种标量对象外,我们还可以直接将一个配置节绑定为一个具有对应结构的符合对象。除此…

【音视频 | RTSP】RTSP协议详解 及 抓包例子解析(详细而不赘述)

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 🤣本文内容🤣&a…

华为开发者大会2024纪要:鸿蒙OS的全新篇章与AI大模型的革命

华为开发者大会2024纪要:鸿蒙OS的全新篇章与AI大模型的革命 在科技的浪潮中,华为再次引领潮流,2024年的开发者大会带来了一系列令人瞩目的创新成果。从鸿蒙操作系统的全新Beta版到盘古大模型的震撼发布,华为正以前所未有的速度重塑智能生态。以下是本次大会的亮点,让我们…

MUNIK解读ISO26262--系统架构

功能安全之系统阶段-系统架构 我们来浅析下功能安全系统阶段重要话题——“系统架构” 目录概览: 系统架构的作用系统架构类型系统架构层级的相关安全机制梳理 1.系统架构的作用 架构的思维包括抽象思维、分层思维、结构化思维和演化思维。通过将复杂系统分解…

哨兵1SAR空间数据包协议数据单元文档(七)

《哨兵1SAR空间数据包协议数据单元》文档对数据包的结构进行了详细描述,并提供了用户数据的格式和解码算法。 原文链接: 哨兵1SAR空间数据包协议数据单元文档英文版 同系列中的其他文章篇链接: 哨兵1SAR空间数据包协议数据单元文档(一) 哨兵…

lodash-es 基本使用

中文文档:https://www.lodashjs.com/ cloneDeep方法文档:https://www.lodashjs.com/docs/lodash.cloneDeep#_clonedeepvalue 参考掘金文章:https://juejin.cn/post/7354940462061715497 安装: pnpm install lodash-esnpm地址&a…

Javase-异常

文章目录 1. 异常概述2. 异常的继承结构3. 自定义异常4. 异常的处理5. 异常的使用6. finally语句块7. 方法覆盖与异常 1. 异常概述 什么是异常 ①什么是异常?有什么用? 1.Java中的异常是指程序运行时出现了错误或异常情况,导致程序无法继续正常执行的现象。例如&…

谷粒商城 - 树形菜单递归流查询、三级分类数据查询性能优化、Jmter 性能压测

目录 树形分类菜单(递归查询,强扩展) 1)需求 2)数据库表设计 3)实现 4)关于 asSequence 优化 性能压测 1)Jmeter 安装使用说明 2)中间件对性能的影响 三级分类数…

【Kubernetes】Pod 资源调度之亲和性调度

Pod 资源调度之亲和性调度 1.Node 亲和性调度1.1 Node 硬亲和性1.2 Node 软亲和性 2.Pod 亲和性调度2.1 Pod 硬亲和2.2 Pod 软亲和2.3 Pod 反亲和 Kubernetes 的 默认调度器 以 预选、优选、选定机制 完成将每个新的 Pod 资源绑定至为其选出的目标节点上,不过&#…

吴恩达深度学习笔记:机器学习策略(2)(ML Strategy (2)) 2.7-2.8

目录 第三门课 结构化机器学习项目(Structuring Machine Learning Projects)第二周:机器学习策略(2)(ML Strategy (2))2.7 迁移学习(Transfer learning) 第三门课 结构化机器学习项目&#xff0…

学习笔记——动态路由——IS-IS中间系统到中间系统(区域划分)

三、IS-IS区域划分 根据IS-IS路由器邻居关系,可以将IS-IS划分为两个区域——骨干区域和非骨干区域。(注意,这里的区域不是上文中提到的Area ID)由L2的IS-IS邻居构成的区域为骨干区域,由L1的IS-IS邻居构成的区域为非骨…

智能运维场景探索 | 运营分析

【本场景来源于 擎创科技《一体化数智运维AIOps解决方案》白皮书,经过重新编写】 该场景主要围绕生产运行、运营决策两个维度进行展开,通过对配置、性能、业务等运行数据的加工计算,形成可量化运营效果、可衡量发展方向的运营数据。整体以低…

基于Qt实现的PDF阅读、编辑工具

记录一下实现pdf工具功能 语言:c、qt IDE:vs2017 环境:win10 一、功能演示: 二、功能介绍: 1.基于saribbon主体界面框架,该框架主要是为了实现类似word导航项 2.加载PDF放大缩小以及预览功能 3.pdf页面跳转…

Python基础小知识问答系列-高效遍历多个不同类型元素的迭代器

1. 问题: 当需要对多个迭代器进行相同遍历操作时,如何避免因为迭代器之间的类型或者迭代器元素 数量过大引发的问题? 2. 解决方法: 使用itertools模块中的chain函数。 示例: from itertools import chainlist_a [2,…

matlab 抛物线图像绘制

抛物线图像绘制 x^2y4绘制结果 x^2y4 clc,clear,close all; length10; % 创建一个范围内的 x 和 y 值 x linspace(-length, length, 1000); y linspace(-length, length, 1000);% 创建一个网格来表示 x 和 y 值的组合 [X, Y] meshgrid(x, y);% 计算方程的左边和右边的值 LH…

QWidget成员函数功能和使用详细说明(四)(文字+用例+代码+效果图)

文章目录 1.测试工程配置2.成员函数2.1 void setParent(QWidget *parent)2.2 void setMouseTracking(bool enable)2.3 bool hasMouseTracking() const2.4 void setPalette(const QPalette &)2.5 const QPalette &palette() const2.6 int QWidget::grabShortcut(const Q…

实战干货,企业在数字化转型中如何通过最佳实践落地BI报表?

引言:上一篇文章我们提到:通过9大步骤,帮助企业在数字化转型中搭建数据分析的报表体系!在实际中的落地过程,通过实施服务的哪些最佳实践可以确保落地效果,达到项目预期目标,给客户带来实质价值&…

香蕉云编+uniapp打包ios的开发包和生产包

登录香蕉云编,找到 云编-ios证书生成,新建CSR文件,并下载csr文件。 登录苹果开发者中心,进入证书页面。 1.创建一个证书,选择ios Distribution类型即可,这是个通用的证书,既能用来打正式包又能…

“郭有才”商标主要类别都已被注册!

前阵山东网红“郭有才”火遍大江北,当然少不了许多想去申请注册“郭有才”商标名称的,普推商标知产老杨检索,发现“郭有才”商标申请了43个类别,基本上类别都被申请注册,已注册的商标大多是在“郭有才”火之前申请注册…

MyBatis入门程序详解

目录 一、MyBatis概述 二、编写MyBatis入门程序 三、配置SQL提示 四、传统jdbc的劣势 一、MyBatis概述 MyBatis是一个基于Java的持久层框架,它内部封装了JDBC操作,使得开发人员可以更专注于SQL语句本身而非繁琐的JDBC操作细节。在MyBatis中&#xff0…