谷粒商城のNginx

news2024/9/17 7:16:08

文章目录

  • 前言
  • 一、Nginx
    • 1、安装Nginx
    • 2、相关配置
      • 2.1、配置host
      • 2.2、配置Nginx
      • 2.3、配置网关


前言

  本篇重点介绍项目中的Nginx配置。

一、Nginx

1、安装Nginx

  首先需要在本地虚拟机执行:

mkdir -p /mydata/nginx/html /mydata/nginx/logs /mydata/nginx/conf

  在项目中选择在docker上安装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/conf:/etc/nginx \
-d nginx:1.10

  命令的含义:

  • docker run: 启动一个新的容器。
  • -p 80:80: 将本地主机的端口 80 映射到容器的端口 80,容器内运行的 Nginx 服务将通过主机的 80 端口对外提供服务。
  • --name nginx: 指定容器的名字为 nginx。
  • -v /mydata/nginx/html:/usr/share/nginx/html: 将本地目录 /mydata/nginx/html 挂载到容器中的 Nginx 静态文件目录 /usr/share/nginx/html,用于存放网站内容。
  • -v /mydata/nginx/logs:/var/log/nginx: 将本地目录 /mydata/nginx/logs 挂载到容器中的日志目录 /var/log/nginx,用于存放 Nginx 日志。
  • -v /mydata/nginx/conf:/etc/nginx:将本地目录 /mydata/nginx/conf 挂载到容器的配置目录 /etc/nginx,用于存放 Nginx 的配置文件。
  • -d: 让容器在后台运行(分离模式)。
  • nginx:1.10: 使用 nginx 镜像的 1.10 版本。

  安装完成后使用docker ps命令查看:
在这里插入图片描述  可以设置Nginx虚拟机开机自启动:docker update nginx--restart=always,注意,每次修改了Nginx相关的配置,都要docker restart nginx

2、相关配置

2.1、配置host

  hosts 文件是一个纯文本文件,用于将主机名(域名)映射到 IP 地址。当在浏览器或其他网络应用中输入一个域名(如 www.gulimall.com)时,操作系统会首先查找 hosts 文件,以确定该域名是否有对应的 IP 地址映射。如果在 hosts 文件中找到了匹配项,系统将直接使用该 IP 地址,而不会查询 DNS 服务器。
  hosts 文件的解析优先级高于 DNS 服务器。这意味着即使 DNS 服务器有对应的域名记录,如果 hosts 文件中存在该域名的映射,系统将优先使用 hosts 文件中的 IP 地址。
  简单来说,我们自己的项目没有买域名,也没有进行备案,直接在浏览器上输入gulimall.com是访问不到的,将它写入hosts文件,启动项目,就可以访问到。
  在hosts文件末尾加入(注意,虚拟机地址换成你自己的):

192.168.101.128 gulimall.com
192.168.101.128 search.gulimall.com

2.2、配置Nginx

  首先介绍一下Nginx的几个重要目录:

  • /nginx/nginx.conf: Nginx 的主配置文件,定义了服务器的全局设置、虚拟主机、日志位置等。
  • /nginx/mine.types: 存放媒体类型
  • /nginx/conf.d/: 该目录下可以放置更多的虚拟主机配置文件或子配置文件,通常用于分开管理多个站点配置。
  • /nginx/html: 通常存放静态网站文件(如 HTML、CSS、JavaScript 等)。可用于动静分离。可以通过自定义配置文件修改网站根目录的位置。
  • /nginx/logs: Nginx日志目录。

  在本项目中,重点看nginx.conf/nginx/conf.d/下自定义的gulimall.conf

  1. nginx.conf:

user  nginx; #指定运行 Nginx 的用户。这里是 nginx 用户,通常在安装 Nginx 时创建。
worker_processes  1; #设置 Nginx 启动的工作进程数量。每个工作进程可以处理多个请求。

error_log  /var/log/nginx/error.log warn; #设置错误日志文件的路径以及日志级别。日志级别 warn 表示记录警告信息。错误日志存储在 /var/log/nginx/error.log。
pid        /var/run/nginx.pid; #Nginx 运行时保存进程 ID 的文件位置,用于管理 Nginx 进程。


events {
    worker_connections  1024; #每个工作进程可以处理的最大并发连接数,设置为 1024 个连接。这个值决定了服务器的并发能力。
}


http {
    include       /etc/nginx/mime.types; #引入 /etc/nginx/mime.types 文件,用于定义不同扩展名文件的 MIME 类型。
    default_type  application/octet-stream; #默认 MIME 类型。如果 Nginx 无法确定文件的类型,将其作为二进制流 (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; #定义访问日志的位置和使用的日志格式。访问日志存储在 /var/log/nginx/access.log 中,使用 main 格式。

    sendfile        on; #开启高效的文件传输方式,减少服务器和客户端之间的 CPU 开销。sendfile 可以直接通过内核完成文件的传输,而不需要经过用户空间。
    #tcp_nopush     on; # 这个选项结合 sendfile 使用,用于优化 TCP 包的传输。

    keepalive_timeout  65; # 设定 Keep-Alive 的超时时间为 65 秒。Keep-Alive 允许客户端与服务器保持连接,从而避免频繁建立新连接。

    #gzip  on; #用于启用 gzip 压缩响应以减少网络带宽的使用。

    include /etc/nginx/conf.d/*.conf; #包含 /etc/nginx/conf.d/ 目录下的所有配置文件,常用于加载多个站点或虚拟主机的配置文件。
    upstream gulimall{ #定义一个上游服务器组,名为 gulimall。
      server 192.168.101.1:88; #定义一个后端服务器地址 192.168.101.1,监听端口 88。当请求被反向代理时,Nginx 会将请求转发到这个上游服务器。
    }
}
  1. gulimall.conf:
server {
    listen       80; #Nginx 将监听 80 端口,即 HTTP 的默认端口。
    server_name  *.gulimall.com; # 服务器将处理所有匹配 *.gulimall.com 这个通配符域名的请求(如 www.gulimall.com、api.gulimall.com 等)。

    #charset koi8-r;
    #access_log  /var/log/nginx/log/host.access.log  main;
    
    location /static/ { # 匹配以 /static/ 开头的 URL 路径。这个路径通常用于提供静态文件,如图片、CSS、JavaScript 等。(静态资源)
      root   /usr/share/nginx/html; # 将请求映射到 /usr/share/nginx/html 目录下,文件路径将是 /usr/share/nginx/html/static/,即请求 /static/file.jpg 对应的文件路径为 /usr/share/nginx/html/static/file.jpg。
    }

    location / { #匹配所有未匹配其他 location 的请求。即默认处理根路径 / 及其下的所有请求。(非静态资源)
        proxy_set_header Host $host; #设置 Host 请求头为客户端请求的主机名,保持请求的 Host 头信息不变,以便后端服务器能够正确处理该请求。
        proxy_pass http://gulimall; #将请求代理到名为 gulimall 的上游服务器(这个上游服务器已在前面的配置中定义,地址是 192.168.101.1:88)。
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html; #当服务器遇到 500、502、503 或 504 错误时,将客户端重定向到 /50x.html 错误页面。
    location = /50x.html { #当请求路径是精确匹配 /50x.html 时,Nginx 从 /usr/share/nginx/html 目录中查找该文件。
        root   /usr/share/nginx/html; #定义错误页面的根目录。即 /50x.html 实际对应的文件路径是 /usr/share/nginx/html/50x.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;
    #}
}

  首先通过主配置文件 nginx.conf找到 gulimall.conf,根据server_name的设置,处理所有匹配*.gulimall.com 这个通配符域名的请求,如果是以/static/开头的 URL 路径,就映射到虚拟机的/nginx/html,是其他请求,就代理到192.168.101.1:88(项目的网关),然后再由网关进行各个模块的分发,这个过程体现了动静分离,静态文件都放在nginx下的html文件夹中。
  不知是否注意到,我在hosts文件中配置的ip是通过虚拟机中ip addr命令查询到的192.168.101.128,而nginx配置文件中的却是主机cmd打开命令提示符通过ipconfig查询到的IPv4 Address,为何最终是以后者为准?原因在于主机的192.168.101.1是一个虚拟网络的·网关地址,允许主机与虚拟机通过这个虚拟网络进行通信。虚拟机的192.168.101.128是它在虚拟网络中的地址,主机可以通过网关(192.168.101.1)访问它。因为虚拟机使用的是 NAT 模式,主机可以通过网关与虚拟机通信。这意味着主机通过它的 VMnet8 接口来访问虚拟机或代理流量到虚拟机。简而言之,主机需要通过网关地址访问虚拟机中的地址
  上面的配置完成之后,还需要将静态文件全部放在Nginx的html目录下,然后就可以将项目中的静态文件删除了。最后还需要修改index.html中静态文件的访问路径,加上/static/index
在这里插入图片描述

2.3、配置网关

  最后还要对网关的配置进行修改:

        - id: gulimall_host_route
          uri: lb://gulimall-product
          predicates:
            - Host=gulimall.com #只有当请求的域名是 gulimall.com 时,网关才会将这个请求转发到 gulimall-product 服务。

        - id: gulimall_search_route
          uri: lb://gulimall-search
          predicates:
            - Host=search.gulimall.com

下一篇:谷粒商城搜索服务整合Elasticsearch

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

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

相关文章

ModuleNotFoundError: No module named ‘mmcv.transforms‘

不得已的解决方法: mmcv升级到2.0.0即可解决 升级后自然又面临一系列不兼容问题! 官方文档查漏补缺

【STM32】呼吸灯实现

对应pwm概念可以去看我的博客51实现的呼吸灯 根据对应图我们可知预分频系数为999,重装载值为2000,因为设置内部时钟晶振频率为100MHZ ,1s跳 100 000000次 ,跳一次需要1/100 000000s 20ms0.02s 对应跳的次数为 我们使用通用定时器…

九,自定义转换器详细操作(附+详细源码解析)

九,自定义转换器详细操作(附详细源码解析) 文章目录 九,自定义转换器详细操作(附详细源码解析)1. 基本介绍2. 准备工作3. 自定义转换器操作4. 自定义转换器的注意事项和细节5. 总结:6. 最后&…

【前端学习】AntV G6-07 深入图形与图形分组、自定义节点、节点动画(上、中)

课程链接 AntV G6:深入图形与图形分组、自定义节点、节点动画(上)_哔哩哔哩_bilibili AntV G6:深入图形与图形分组、自定义节点、节点动画(中)_哔哩哔哩_bilibili 图形分组 Group | G6 (antgroup.com) 自…

ARM32开发——DMA内存到内存

🎬 秋野酱:《个人主页》 🔥 个人专栏:《Java专栏》《Python专栏》 ⛺️心若有所向往,何惧道阻且长 文章目录 需求数据交互流程开发流程依赖引入DMA初始DMA传输请求完整代码 关心的内容DMA初始化DMA初始化DMA数据传输请求完整代码 DMA中断开启…

封装智能指针 qt实现登录界面

1.封装独占智能指针——unique_ptr #include <iostream> #include <utility> // For std::move// 命名空间 namespace custom_memory { template <typename T> class myPtr { public:// 使用初始化列表进行初始化explicit myPtr(T* p nullptr) noexcept : …

卡西莫多的诗文集2022-2024.9月6-校庆国庆专版定版

通过网盘分享的文件&#xff1a;卡西莫多的诗文集2022-2024.9月6-A5-校庆国庆专版-定版.pdf 链接: https://pan.baidu.com/s/1cpFK5k1baGXbSGxY30GL_A?pwdjgnt 提取码: jgnt 卡西莫多的诗文集2022-2024.9月6-校庆国庆专版&#xff0c;又稍作修改并勘误了一些错字&#xff0c;…

AWQ量化(Activation-aware Weight Quantization)

论文&#xff1a; AWQ: Activation-aware Weight Quantization for On-Device LLM Compression and Acceleration 中文解读&#xff1a; 深入理解AWQ量化技术 - 知乎 (zhihu.com) 动机&#xff1a;端侧设备用LLM&#xff0c;为了减少显存占用量&#xff0c;所以要用INT4量化&am…

【Jupyter Notebook】汉化

1.打开:Anaconda Prompt 2.输入:"activate Zhui01"(注意&#xff1a;Zhui01是刚创建的环境名字) activate Zhui01 3.输入:"pip install jupyterlab-language-pack-zh-CN" pip install jupyterlab-language-pack-zh-CN 4.打开:Jupyter Notebook 5.点击&q…

Mysql高级篇(中)——七种常见的 join 查询图

注意&#xff1a; MySQL是不支持 FULL OUTER JOIN 这种语法的&#xff0c;因此要实现图中 6、7的查询结果&#xff0c;可以使用 UNION 关键字结合 LEFT JOIN、RIGHT JOIN 实现&#xff0c;UNION可以实现去重的效果&#xff1b; 参考如下代码&#xff1a; -- MySQL中 图标6 的实…

用Unity2D制作一个人物,实现移动、跳起、人物静止和动起来时的动画:中(人物移动、跳起、静止动作)

上回我们学到创建一个地形和一个人物&#xff0c;今天我们实现一下人物实现移动和跳起&#xff0c;依次点击&#xff0c;我们准备创建一个C#文件 创建好我们点击进去&#xff0c;就会跳转到我们的Vision Studio&#xff0c;然后输入这些代码 using UnityEngine;public class M…

MarginNote 4 激活码 - 苹果电脑(Mac)全能型的阅读工具

对广大求学者来说&#xff0c;如何科学有效地掌握知识&#xff0c;一定是大家不懈追求的方向。 众多求学者使用的&#xff0c;深度阅读学习工具 MarginNote&#xff0c;终于为 Mac 推出了官网 4.0 版。带来了众多创新的学习辅助工具。 MarginNote 4 功能简介 1、快速理清各版…

大数据新视界--大数据大厂之Java 与大数据携手:打造高效实时日志分析系统的奥秘

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

探索fastFM:Python中的高效推荐系统库

文章目录 &#x1f680; 探索fastFM&#xff1a;Python中的高效推荐系统库背景&#xff1a;为何选择fastFM&#xff1f;快照&#xff1a;fastFM是什么&#xff1f;安装指南&#xff1a;如何将fastFM加入你的项目&#xff1f;快速入门&#xff1a;五个基础函数的使用实战演练&am…

猫眼电影字体破解(图片转码方法)

问题 随便拿一篇电影做样例。我们发现猫眼的页面数据在预览窗口中全是小方框。在当我们拿到源码以后&#xff0c;数据全是加密后的。所以我们需要想办法破解加密&#xff0c;拿到数据。 破解过程 1.源码获取问题与破解 分析 在我们刚刚请求url的时候是可以得到数据的&#xff…

halcon 由离散点云生成3d模型(2步)

一&#xff0c;创建立方体的3d坐标&#xff0c;定义X,Y,Z坐标 dev_open_window (0, 0, 512, 512, black, WindowHandle) x:[0,0,1,1,0,0,1,1] y:[0,1,1,0,0,1,1,0] z:[0,0,0,0,2,2,2,2] 二&#xff0c;由3创建3d模型&#xff08;在这里是将所有的点集合为一体&#xff09; ge…

多路转接之select(fd_set介绍,参数详细介绍),实现非阻塞式网络通信

目录 多路转接之select 引入 介绍 fd_set 函数原型 nfds readfds / writefds / exceptfds readfds 总结 fd_set操作接口 timeout timevalue 结构体 传入值 返回值 代码 注意点 -- 调用函数 select的参数填充 获取新连接 注意点 -- 通信时的调用函数 添…

JavaScript使用高德API显示地图

前言 在JavaScript中&#xff0c;使用Leaflet库显示地图是一种常见的做法。Leaflet是一个开源的JavaScript库&#xff0c;用于在Web应用程序中创建互动地图。它非常轻量级&#xff0c;易于使用&#xff0c;并且提供了多种功能&#xff0c;使开发者能够轻松地将地图集成到他们的…

【Python报错已解决】 SyntaxError: positional argument follows keyword argument

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 文章目录 前言一、问题描述1.1 报错示例1.2 报错分析1.3 解决思路 二、解决方法2.1 方法一&#xff1a;调整参数顺序2.2 步骤二…

银行贷款产品

1、对公贷款 1.1 一般贷款 按贷款期限可分为短期贷款和中长期贷款。短期贷款是指金融企业根据有关规定发放的,期限在1年(含1年)以下的各种贷款。中长期贷款是指金融企业发放的贷款期限在1年以上的各种贷款。 按提供方式不同可分为信用贷款、担保贷款等。信用贷款是指金融企…