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

谷粒商城の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

相关文章:

谷粒商城のNginx

文章目录 前言一、Nginx1、安装Nginx2、相关配置2.1、配置host2.2、配置Nginx2.3、配置网关 前言 本篇重点介绍项目中的Nginx配置。 一、Nginx 1、安装Nginx 首先需要在本地虚拟机执行: mkdir -p /mydata/nginx/html /mydata/nginx/logs /mydata/nginx/conf在项目…...

Debug-027-el-tooltip组件的使用及注意事项

前言: 这两天,碰到这个饿了么的el-tooltip比较多。这个组件使用起来也挺简单的,常用于展示鼠标 hover 时的提示信息。但是有一些小点需要注意。这里不再机械化的介绍文档,不熟悉的话可以先看一下: https://element-pl…...

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

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

flink wordcount

Maven配置pom文件 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/P…...

组合模式(Composite Pattern)

使用组合模式&#xff08;Composite Pattern&#xff09;是一个更优雅的方式来表示菜单和菜单项。组合模式允许我们将单个对象&#xff08;如菜单项&#xff09;和组合对象&#xff08;如菜单&#xff09;以相同的方式处理。 解决方案&#xff1a; 创建组合结构&#xff1a;我…...

教你制作一本加密的样本册

在这个信息的时代&#xff0c;保护自己的隐私和知识产权变得尤为重要。你有没有想过&#xff0c;如何将自己珍贵的样本资料变成一本只有自己才能查看的加密宝典&#xff1f;今天&#xff0c;我就来教你制作一本加密的样本册 第一步&#xff0c;打开浏览器&#xff0c;搜索FLBOO…...

C语言进阶【1】--字符函数和字符串函数【1】

本章概述 字符分类函数字符转换函数strlen的使用和模拟实现strcpy的使用和模拟实现strcat的使用和模拟实现strcmp的使用和模拟实现彩蛋时刻&#xff01;&#xff01;&#xff01; 字符分类函数 字符&#xff1a; 这个概念&#xff0c;我们在以前的文章中讲过了。我们键盘输入的…...

git提交自动带上 Signed-off-by信息

为了确保在使用 Signed-off-by 签名的同时保留你的提交消息&#xff0c;你需要修改 prepare-commit-msg 钩子脚本&#xff0c;以便它不会丢失原始的提交信息。 增加prepare-commit-msg 钩子以保留提交消息 prepare-commit-msg 钩子的目的是在提交信息文件中插入额外的内容&am…...

图论(2)

一、度 度统计的是一个节点上又多少条边 度出度入度 出度&#xff1a;统计以该节点为起始点箭头指向外面的边的条数 入度&#xff1a;统计箭头指向该节点的边数 度为1的节点为悬挂节点&#xff0c;边为悬挂边 用矩阵计算节点的度 二、握手定理 比如这里第一个集合里面有三…...

ASP.NET Core 入门教学十九 依赖注入ioc

ASP.NET Core内置了对依赖注入&#xff08;Dependency Injection&#xff0c;简称DI&#xff09;的支持&#xff0c;这是一种设计模式&#xff0c;用于实现控制反转&#xff08;Inversion of Control&#xff0c;简称IoC&#xff09;&#xff0c;从而使得应用程序组件之间的耦合…...

omm kill 内存碎片化

内存频繁 OOM(Out of Memory)会导致内存碎片化,并进一步加剧无可用内存分配的问题。碎片化是内存管理中常见的问题,当系统频繁分配和释放内存时,内存空间会被分割成许多小块,虽然内存总量可能足够,但这些小块无法满足较大进程或数据的内存需求,最终导致系统无法找到足够…...

JS中给元素添加事件监听器的各种方法详解(包含比较和应用场景)

JavaScript 中给元素添加事件监听器的各种方法详解 在 JavaScript 中&#xff0c;事件处理是前端开发的一个重要部分。无论是点击按钮、提交表单&#xff0c;还是鼠标悬停&#xff0c;都涉及到事件监听。本文中&#xff0c;我将详细讲解各种给元素添加事件监听器的方法&#x…...

Python基本数据类型之复数complex

来源&#xff1a; “码农不会写诗”公众号 链接&#xff1a;Python基本数据类型之复数complex 文章目录 01 基本概念02 基本运算03 拓展1复数与向量 复数complex Python基本数据之复数(complex)即包含实部和虚部的数字。 01 基本概念 即包含实部和虚部的数字。 在Python中&am…...

第六届机器人与智能制造技术国际会议 (ISRIMT 2024)

目录 会议详情 主题 会议官网 会议详情 第六届机器人与智能制造技术国际研讨会&#xff08;ISRIMT 2024&#xff09;计划于2024年9月20-22日在常州举行。会议主要聚焦“机器人”和“智能制造技术”的研究领域&#xff0c;旨在为机器人和智能制造技术领域的专家学者、工程技术…...

鸿蒙轻内核M核源码分析系列十九 Musl LibC

往期知识点记录&#xff1a; 鸿蒙&#xff08;HarmonyOS&#xff09;应用层开发&#xff08;北向&#xff09;知识点汇总 轻内核M核源码分析系列一 数据结构-双向循环链表 轻内核M核源码分析系列二 数据结构-任务就绪队列 鸿蒙轻内核M核源码分析系列三 数据结构-任务排序链表 轻…...

mysqldump备份恢复数据库

mysqldump程序可以用来备份和恢复数据库 ,默认情况mysqldump会创建drop table, create table,和insert into的sql语句. 语法 > mysqldump [options] db_name [tbl_name ...] > mysqldump [options] --databases db_name ... > mysqldump [options] --all-databases备…...

路径规划——RRT算法

路径规划——RRT算法 算法原理 RRT算法的全称是快速扩展随机树算法(Rapidly Exploring Random Tree)&#xff0c;它的思想是选取一个初始点作为根节点&#xff0c;通过随机采样&#xff0c;增加叶子节点的方式&#xff0c;生成一个随机扩展树&#xff0c;当随机树中的叶子节点…...

OPCUA-PLC

下载opcua服务器(有PLC可以直连),UaAnsiCServer下载路径 双击运行如下,Endpoint显示opcua服务路径 opc.tcp://DESKTOP-9SD7K4B:48020 下载opcua客户端(类似编写代码连接操作),UaExpert下载路径 如果连接失败,有一个授权认证,点击同意就行 java代码实现连接opcUA操作 pom.…...

在Windows系统上部署PPTist并实现远程访问

在Windows系统上部署PPTist并实现远程访问 前言PPTist简介本地部署PPTist步骤1&#xff1a;获取PPTist步骤2&#xff1a;安装依赖步骤3&#xff1a;运行PPTist 使用PPTist远程访问PPTist步骤1&#xff1a;安装Cpolar步骤2&#xff1a;配置公网地址步骤3&#xff1a;配置固定公网…...

【Grafana】Prometheus结合Grafana打造智能监控可视化平台

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…...

机器学习在天文大数据中的应用:自动化分类近邻星系百万恒星

1. 项目概述&#xff1a;当机器学习遇见近邻星系的大质量恒星在浩瀚的宇宙中&#xff0c;大质量恒星&#xff08;通常指质量超过8倍太阳质量的恒星&#xff09;是名副其实的“宇宙引擎”。它们虽然数量稀少&#xff0c;但通过强烈的星风和最终的超新星爆发&#xff0c;深刻地影…...

FAIR原则下的多元时间序列异常检测:科学数据挑战与实战策略

1. 项目概述&#xff1a;当科学前沿遇上FAIR数据挑战在数据驱动的科学发现时代&#xff0c;我们常常面临一个核心矛盾&#xff1a;一方面&#xff0c;我们有能力采集前所未有的海量、高维数据&#xff1b;另一方面&#xff0c;从这些数据“海洋”中精准捞出那几颗代表新现象、新…...

量子机器学习模拟器性能优化与门层特性解析

1. 量子机器学习模拟器的性能优化之道量子机器学习(QML)作为量子计算与经典机器学习的交叉领域&#xff0c;其核心挑战在于如何高效模拟量子电路的演化过程。传统量子模拟器如PennyLane的default.qubit采用通用方法处理各类量子门操作&#xff0c;未能充分考虑不同门类型的数学…...

给Llama-3-8B-Instruct加个‘垫片’:手把手教你安全添加Pad Token并微调(附完整代码)

为Llama-3-8B-Instruct安全添加Pad Token的工程实践指南当你在微调Llama-3-8B-Instruct时&#xff0c;是否遇到过这样的困扰&#xff1a;模型没有提供Pad Token&#xff0c;导致数据处理和训练过程中出现各种不便&#xff1f;这个问题看似简单&#xff0c;实则暗藏玄机。本文将…...

避坑指南:用SARIMA做时间序列预测时,这5个参数调优错误千万别犯(Python实战)

SARIMA模型调优实战&#xff1a;避开时间序列预测中的五大陷阱引言在数据分析领域&#xff0c;时间序列预测一直是个既迷人又充满挑战的课题。每当我看到那些起伏的曲线&#xff0c;总能感受到数据背后隐藏的故事和规律。SARIMA模型作为时间序列分析的重要工具&#xff0c;因其…...

技术人的职业规划:打造成功的职业生涯

技术人的职业规划&#xff1a;打造成功的职业生涯 引言 作为一名技术人&#xff0c;职业规划是实现职业目标的关键。在快速变化的技术领域&#xff0c;一个清晰的职业规划可以帮助我们明确方向&#xff0c;抓住机会&#xff0c;实现个人价值。 回顾我的职业历程&#xff0c;从一…...

为什么你的DeepSeek工具调用总是超时?揭秘底层Tool Executor线程池配置的2个致命默认值及修复代码

更多请点击&#xff1a; https://kaifayun.com 第一章&#xff1a;为什么你的DeepSeek工具调用总是超时&#xff1f;揭秘底层Tool Executor线程池配置的2个致命默认值及修复代码 DeepSeek-R1 模型在调用外部工具&#xff08;如 HTTP API、数据库查询、Python 函数&#xff09;…...

ChatGPT写不出合格投资人邮件?错!真正稀缺的是这5个私募股权语境理解层(附LP偏好词云图谱)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;ChatGPT投资人邮件撰写的核心误区与范式跃迁 许多创业者在使用ChatGPT辅助撰写面向投资人的邮件时&#xff0c;陷入“信息堆砌型”表达陷阱——将产品功能、技术参数、市场数据不加筛选地塞入正文&…...

m4s-converter技术解析:跨平台B站缓存视频无损转换方案

m4s-converter技术解析&#xff1a;跨平台B站缓存视频无损转换方案 【免费下载链接】m4s-converter 一个跨平台小工具&#xff0c;将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter m4s-converter是一个专业的开…...

DeepSeek免费额度怎么用才不浪费?资深MLOps工程师的6小时压测报告与最优请求批处理公式

更多请点击&#xff1a; https://kaifayun.com 第一章&#xff1a;DeepSeek免费额度怎么用才不浪费&#xff1f;资深MLOps工程师的6小时压测报告与最优请求批处理公式 在连续6小时、覆盖12种负载模式的真实压测中&#xff0c;我们发现DeepSeek API免费额度&#xff08;当前为1…...