当前位置: 首页 > article >正文

nginx 反向代理 配置请求路由

nginx | 反向代理 | 配置请求路由

nginx简介

Nginx(发音为“Engine-X”)是一款高性能、开源的 Web 服务器反向代理服务器,同时也支持邮件代理和负载均衡等功能。它由俄罗斯程序员伊戈尔·西索夫(Igor Sysoev)于 2004 年首次发布,如今已成为全球最受欢迎的 Web 服务器之一。

Nginx 的主要用途和功能
1. Web 服务器
  • 静态内容服务:Nginx 非常擅长处理静态文件(如 HTML、CSS、JavaScript、图片等)。它可以快速地从磁盘读取这些文件并将其发送给客户端。
  • 动态内容处理:虽然 Nginx 本身不直接处理动态内容(如 PHP、Python 等),但它可以通过反向代理或 FastCGI 等方式与后端应用服务器(如 PHP-FPM、Gunicorn 等)配合,实现动态内容的处理。
2. 反向代理服务器
  • 请求转发:Nginx 可以作为中间层,将客户端的请求转发到后端服务器(如 Web 应用服务器、API 服务器等),并将后端服务器的响应返回给客户端。
  • 负载均衡:通过 upstream 模块,Nginx 可以将请求分发到多个后端服务器,实现负载均衡,提高系统的可用性和扩展性。
  • 缓存:Nginx 可以缓存后端服务器的响应,减少对后端服务器的请求压力,提高响应速度。
1.nginx配置步骤

参考博客https://blog.csdn.net/epitomizelu/article/details/140988778

https://blog.csdn.net/epitomizelu/article/details/140990964

1 创建nginx容器
1.1 创建nginx文件夹

在/mydata下创建nginx文件夹,没有/mydata目录需要先创建。

cd /mydata
mkdir nginx
1.2 创建nginx容器获取nginx配置

注意,这个nginx容器不是最终我们需要的nginx容器,仅仅是为了获取nginx配置文件的模板而创建的。

docker run -p 80:80 --name nginx  -d nginx:1.10

执行这个命令时,虽然我们没有提前下载镜像,docker会自动检测,若没有镜像,会先下载镜像。

1.3 复制nginx容器配置文件

复制nginx容器配置文件到前面创建的文件夹/mydata/下。

docker container cp nginx:/etc/nginx .
1.4 删除临时的nginx容器

执行下面命令,先停止nginx容器,后删除容器。

docker stop nginx
docker rm nginx
1.5 创建新的nginx容器

docker run -p 80:80 --name nginx \
-v /mydata/nginx/html:/usr/share/nginx/html \
-v /mydata/nginx/logs:/var/log/nginx \
-v /mydata/nginx/nginx.conf:/etc/nginx/nginx.conf \
-v /mydata/nginx/conf.d:/etc/nginx/conf.d \
-d nginx

拓展:如何将虚拟机目录挂载到nginx的配置文件目录,详细参考我的往期博客:[报错:nginx emerg] open() etcnginxnginx.conf failed (2 No such file or directory)_failed (2: no such file or directory)-CSDN博客

2 配置nginx配置文件
2.1 切换到nginx的目录
cd /mydata/nginx/

在nignx.conf下添加如下内容:

upstream gulimall{
server 192.168.182.1:88
}

在这里插入图片描述

含义:

  1. upstream gulimall
    • upstream 是 Nginx 中的一个指令,用于定义一个后端服务器组。
    • gulimall 是这个后端服务器组的名称。你可以通过这个名称在其他地方引用这个服务器组。
  2. server 192.168.182.1:88
    • 这是 upstream 块中的一个 server 指令,用于指定一个后端服务器。
    • 192.168.182.1 是后端服务器的 IP 地址。
    • 88 是后端服务器监听的端口号。
2.2 切换到nginx的配置文件conf.d目录下
cd /mydata/nginx/conf.d

里边会看到default.conf文件。

2.3 根据default.conf赋值一份名为gulimall.conf

这里命名随意,打开该文件,做如下修改。

cp default.conf gulimall.conf

在这里插入图片描述

这段Nginx配置定义了一个server块,用于处理特定的虚拟主机请求。

  • server { ... }:定义了一个server块的开始和结束,所有在这对大括号之间的配置都是针对这个server块的。

  • listen 80;:这一行指定了Nginx监听的端口号,这里是80端口,这是HTTP服务的默认端口。

  • server_name gulimall.com;:这一行设置了这个server块所对应的域名,这里是gulimall.com。当有请求到达Nginx,并且请求中的Host头部与gulimall.com匹配时,Nginx就会使用这个server块的配置来处理请求。

  • location / { ... }:定义了一个location块,它匹配所有以根路径/开始的请求。location块是server块的子块,用于进一步细化请求的处理规则。

  • proxy_set_header Host $host;:这是location块内的指令,指定了请求的处理方式。proxy_set_header 是一个指令,用于在将请求转发到后端服务器时,设置请求头(HTTP Header)。默认情况下,Nginx 会将 Host 头设置为后端服务器的地址(例如 upstream 中定义的地址)。如果需要保留客户端请求的原始 Host 头,需要显性设置proxy_set_header Host $host;。在这里,如果需要再次利用后端服务的网关转发请求,就需要保留客户端请求的原始 Host 头,这里的$host就是gulimall.com。

  • proxy_pass http://gulimall:这是location块内的指令,指定了请求的处理方式。proxy_pass http://gulimall; 指令会将请求转发到 upstream gulimall 中定义的服务器组。 Nginx 会根据 upstream 中的配置(例如轮询、权重等)选择一个后端服务器来处理请求,当然这里只设置了一个后端服务器,就不需要考虑这些了。


拓展
1.nginx配置文件解析

在这里插入图片描述

全局块:配置影响nginx全局的指令。如:用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等。

event块:配置影响nginx服务器或与用户的网络连接。如:每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网络连接,开启多个网络连接序列化等。

http块:可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。

  • http全局块:如upstream,错误页面,连接超时等。
  • server块:配置虚拟主机的相关参数,一个http中可以有多个server。
    • location:配置请求的路由,以及各种页面的处理情况。
    • location:…
2.nginx和default.conf的内容:
2.1nginx.conf:
user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    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;

    keepalive_timeout  65;

    #gzip  on;
    upstream gulimall{
    
	server 192.168.182.1:88;
	
	}
    include /etc/nginx/conf.d/*.conf;
}

2.2default.conf:
server {
    listen       80;
    server_name  localhost;

    #charset koi8-r;
    #access_log  /var/log/nginx/log/host.access.log  main;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ \.php$ {
    #    root           html;
    #    fastcgi_pass   127.0.0.1:9000;
    #    fastcgi_index  index.php;
    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    #    include        fastcgi_params;
    #}

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}


http://www.kler.cn/a/557798.html

相关文章:

  • uniapp封装请求
  • 在线办公小程序(springboot论文源码调试讲解)
  • 伦敦金库彻底断供的连锁反应推演(截至2025年02月22日)
  • BFS算法解决最短路径问题(典型算法思想)—— OJ例题算法解析思路
  • 深入理解设计模式之策略模式
  • JDBC连接保姆级教程
  • Redis数据结构总结-quickList
  • 漏扫问题-服务器中间件版本信息泄露(消除/隐藏Nginx版本号)
  • 一文说清楚Java中的volatile修饰符
  • 图解JVM-1. JVM与Java体系结构
  • 提升 AI 服务的稳定性:Higress AI 网关的降级功能介绍
  • JavaScript异步编程方式多,区别是什么?
  • 《MB-TaylorFormer:通过泰勒公式扩展的多分支高效Transformer用于图像去雾》学习笔记
  • 线程池的介绍
  • 芯谷TDA2003:汽车收音机及收录机的音频功率放大器之选
  • GStreamer源码安装1.24版本
  • 项目POC的作用是什么
  • 机器学习模型训练超参数优化使用sklearn库里网格搜索(Grid Search)方法所有参数含义解释
  • 1.9 重叠因子:中点价格(MidPoint over period, MIDPOINT)概念与Python实战
  • halcon 条形码、二维码识别、opencv识别