谷粒商城のNginx

文章目录

  • 前言
  • 一、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_routeuri: lb://gulimall-productpredicates:- Host=gulimall.com #只有当请求的域名是 gulimall.com 时,网关才会将这个请求转发到 gulimall-product 服务。- id: gulimall_search_routeuri: lb://gulimall-searchpredicates:- Host=search.gulimall.com

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

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

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

相关文章

数学建模笔记——TOPSIS[优劣解距离]法

数学建模笔记——TOPSIS[优劣解距离法] TOPSIS(优劣解距离)法1. 基本概念2. 模型原理3. 基本步骤4. 典型例题4.1 矩阵正向化4.2 正向矩阵标准化4.3 计算得分并归一化4.4 python代码实现 TOPSIS(优劣解距离)法 1. 基本概念 C. L.Hwang和 K.Yoon于1981年首次提出 TOPSIS(Techni…

Windows操作系统sid系统唯一标识符查看和修改

1、sid介绍 sid 作为windows系统唯一的标识,对某些集群业务有依赖关系,如果重复可能导致集群部署异常。 如:域控AD 就依赖 sid 功能。 但是某个云主机或虚拟机使用同一个ghost进行操作系统部署,就可能会导致重复的情况&#xf…

为什么现在都流行开放式耳机?平价高品质蓝牙耳机推荐大赏

现在开放式耳机流行,是因为相比入耳式,它具有以下的优势: 一、佩戴舒适 开放式耳机通常设计轻盈,不直接刺激耳膜,长时间使用也不会给耳膜带来压迫感。而且其不入耳的设计不会堵塞耳道,使用较长时间后&…

Notepad++ 修改 About

1. 用这个工具,看标题,修改 1700 里的 Caption, 保存为 xx.exe, 2.修改链接,先准备如上。 2.1 使用插件 Hex Editor,拖入刚保存的 Notepad.exe 到 Notepad.exe, 按 c..S..H 2.2 按 ctrlf 查找 68 00 74 00 74 00 70 00 73 00 3…

深入理解数据库的 4NF:多值依赖与消除数据异常

在数据库设计中, "范式" 是一个常常被提到的重要概念。许多初学者在学习数据库设计时,经常听到第一范式(1NF)、第二范式(2NF)、第三范式(3NF)以及 BCNF(Boyce-…

线程的四种操作

所属专栏:Java学习 1. 线程的开启 start和run的区别: run:描述了线程要执行的任务,也可以称为线程的入口 start:调用系统函数,真正的在系统内核中创建线程(创建PCB,加入到链…

利士策分享,从零开始创业:一场勇敢而精彩的旅程

利士策分享,从零开始创业:一场勇敢而精彩的旅程 附上可落地执行的策略: 在创业的征途中,理论固然重要,但可落地执行的策略才是推动我们前进的实际动力。 以下是一些具体且可操作的策略,希望可以帮助你从零…

vue通过html2canvas+jspdf生成PDF问题全解(水印,分页,截断,多页,黑屏,空白,附源码)

前端导出PDF的方法不多,常见的就是利用canvas画布渲染,再结合jspdf导出PDF文件,代码也不复杂,网上的代码基本都可以拿来即用。 如果不是特别追求完美的情况下,或者导出PDF内容单页的话,那么基本上也就满足业…

《数字信号处理》学习05-单位冲击响应与系统响应

目录 一,单位冲激响应 二,LTI系统对任意序列的系统响应 三,LTI系统的性质 通过上一篇文章《数字信号处理》学习04-离散时间系统中的线性时不变系统-CSDN博客的学习,我已经知道了离散时间线性时不变系统(LTI&#x…

GQA (group query attention)

什么是GQA? 多个head的Query共用一组K和V。llama模型就用到该技术。 需要明确几点: 1.group有几组 2.每个group对应几个head 3.q以head为单位 k,v以group为单位 每个head/group特征维度都是head_dim 代码实现 import torch.nn as nn import torch …

串口通信协议(UART)

简介 uart通讯协议,是一种成本低、容易使用、通信线路简单,可实现两个设备的互相通信的协议;是一种全双工,设备点对点通信的协议。下面从硬件电路、电平标准和串口参数等方面来了解uart通信协议。 硬件电路 硬件电路非常简单&am…

深入Redis:强大的主从复制

如果某个服务器或者程序,只有一个节点(服务器),就会有很大的问题。比如可用不高,并发量也比较低。引入分布式系统,也主要是为了解决上述的单点问题。 Redis,主要部署在分布式系统上。在分布式系…

无人机之地面站篇

无人机的地面站,又称无人机控制站,是整个无人机系统的重要组成部分,扮演着作战指挥中心的角色。以下是对无人机地面站的详细阐述: 一、定义与功能 无人机地面站是指具有对无人机飞行平台和任务载荷进行监控和操纵能力的一组设备&…

Postgresql碎片整理

创建pgstattuple 扩展 CREATE EXTENSION pgstattuple 获取表的元组(行)信息,包括空闲空间的比例和行的平均宽度 SELECT * FROM pgstattuple(表名); 查看表和索引大小 SELECT pg_relation_size(表名), pg_relation_size(索引名称); 清理碎片方…

【魔法 / NOI】

题目 思路 动态规划: 状态定义: f [ k ] [ i ] [ j ] 对应使用了不超过 k 次魔法,从 i 到 j 的路径集合 f[k][i][j] 对应使用了不超过k次魔法,从i到j的路径集合 f[k][i][j]对应使用了不超过k次魔法,从i到j的路径集合 状…

vc-align源码分析 -- ant-design-vue系列

vc-align源码分析 源码地址:https://github.com/vueComponent/ant-design-vue/tree/main/components/vc-align 1 基础代码 1.1 名词约定 需要对齐的节点叫source,对齐的目标叫target。 1.2 props 提供了两个参数: align:对…

WPF-快速构建统计表、图表并认识相关框架

一、使用ScottPlot.Wpf 官网地址:https://scottplot.net/quickstart/wpf/ 1、添加NuGet包:ScottPlot.Wpf 2、XAML映射命名空间: xmlns:ScottPlot"clr-namespace:ScottPlot.WPF;assemblyScottPlot.WPF" 3、简单示例:…

2024年测评7款最佳AI论文修改润色平台

在2024年,AI论文修改润色平台的测评和推荐成为学术界和研究者们关注的热点。本文将详细评测并推荐7款最佳AI论文修改润色平台,包括千笔-AIPassPaper,并结合我搜索到的资料进行分析。 一、千笔-AIPassPaper 千笔-AIPassPaper是一款集论文大纲…

【Nginx系列】Nginx中rewrite模块

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

SpringBoot教程(安装篇) | Elasticsearch的安装

SpringBoot教程(安装篇) | Elasticsearch的安装 一、确定Elasticsearch版本二、下载elasticsearch(windows版本)官网下载如何解压配置 允许 别人跨域 访问自己启动运行 三、Es可视化工具安装(elasticsearch-head&#…