通用商城项目(下)之——Nginx的安装及使用

news2024/10/7 10:14:01

(作为通用商城项目的一个部分,单独抽离了出来。查看完整见父页面:

加入Nginx-完成反向代理、负载均衡和动静分离

1.配置SSH-使用账号密码,远程登录Linux

1.1配置实现

1、配置sshd
1)sudo vi /etc/ssh/sshd_config
2)将PasswordAuthentication的no改成yes
3)重启服务service sshd restart
        提醒:修改文件权限不够,请使用sudo ...


2、再进行Xshell的配置-根据实际情况配置即可

         提示:主机(H),根据实际的IP地址来填写。

        可以在linux端,使用ip addr指令,来查看当前linux的ip地址。如图:

显示的ip出现在inet后面,比如192.168.56.100/24,192.168.56.100就是ip地址

注意,linux服务端的防火墙需要放开22端口。否则可能连接不上。

用户名:root

默认密码:vagrant

3、测试是否可以进入到mysql
sudo docker restart mys
sudo docker exec -it mysql /bin/bash

登录mysql: mysql -u root -p

输入密码登录mysql

show databases;  查看数据库

1、在cmd下,登录vagrant ssh

2、修改配置文件:sudo vi /etc/ssh/sshd_config

3、然后通过查找命令:“/password”,找到password的相关属性,

将“PasswordAuthentication no” 改为"PasswordAuthentication yes"。支持远程登陆的密码验证。

4、重启服务service sshd restart

5、输入root的密码:vagrant

6、提示成功"==== AUTHENTICATION COMPLETE ==="

7、使用 Xshell6 / 7 进行配置连接

        使用ip addr指令,来查看当前linux的ip地址

        为了展示登陆用户名和密码,选择了一次性接受。再次输入上面的用户名和密码。

完成了使用 Xshell 6 或 7 远程登陆Linux。

Xshell下的Linux操作

1、使用docker ps来显示有哪些容器在运行

2、运行mysql: docker restart mysql

3、进入mysql容器:docker exec -it mysql /bin/bash

4、运行mysql:mysql -u root -p  ,然后输入密码root

5、展示数据库:show databases;

6、通过两次exit,退回到linux


2.在Linux安装&配置Nginx-能正确访问到Nginx

1.Nginx+windows搭建域名访问环境

- 分析我们当前项目的架构情况

- 通过Nginx可以实现反向代理、负载均衡和动静分离

- 以前通过ip地址定位,改为通过域名来访问网站,比如steinliving.com

1.完成功能-示意图
-在Linux安装/配置Nginx

如何在linux下,使用docker安装Nginx

注意回顾:Docker安装软件镜像基本原理

linux的文件与容器文件进行挂载,和端口映射

1.安装Nginx

mkdir nginx ,在mydata文件夹下创建存放nginx的文件

(可以使用 ping:www.baidu.com 来确定网络是否通常)

docker run -p 80:80 --name nginx -d nginx:1.10 ,拉取该版本的nginx镜像,并启动命名容器

docker ps 查看容器是否已经运行

2.将容器内的配置文件拷贝到当前目录
1)操作
[root@10 mydata]#docker container cp nginx:/etc/nginx .严重注意!! nginx后面的“空格”+“.”

语法格式:

1.docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH
2.docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
- CONTAINER,可以是正在运行或已停止的容器,名称或ID均可。nginx:是容器名
- SRC_PATH,源文件或目录在容器内的路径。复制容器里面路径为/etc/nginx下的所有文件
- DEST_PATH,目标路径在主机上的位置。保存到当前文件夹。“.”指当前文件夹
————————————————

[root@10 mydata]#Is
mysql nginx
[root@10 mydata]#cd nginx/
[root@10 nginx]#Is
conf.d fastcgi_params koi-utf koi-win mime.types modules nginx.conf scgi_params

3.终止原容器,并删除原容器,保留配置文件即可
[root@10 nginx]#docker stop nginx    //先停止容器运行
nginx    //反馈信息
[root@10 nginx]#docker rm nginx     //然后删除容器
nginx    //反馈信息
[root@10 nginx]#Is           //可以看到linux中的文件,依然存在。
conf.d fastcgi_params koi-utf koi-win mime.types modules nginx.conf scgi_params
uwsgi_params win-utf

4.修改文件夹名nginx为conf,并把conf移动到/mydata./nginx下

[root@localhost /]# cd mydata
[root@localhost mydata]# ls
mysql  nginx
[root@localhost mydata]# mv nginx/ conf
[root@localhost mydata]# ls
conf  mysql
[root@localhost mydata]# mkdir nginx
[root@localhost mydata]# ls
conf  mysql  nginx
[root@localhost mydata]# mv conf/ ./nginx/
[root@localhost mydata]# ls
mysql  nginx

注意:[root @localhost] 与 [root@10]不同是因为不同的账户造成的,以自己的为准,不影响使用

5.创建新的nginx
[root@10 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

说明:这儿用的是绝对路径,可以在任意文件位置执行。
正常运行返回的:227784fac17058225a510aa06e09c225f46c1f1e4d40891b70cec9443756d1ab

使用docker ps,查看容器nginx是否正常启动。

CONTAINER ID   IMAGE        COMMAND                  CREATED              STATUS              PORTS                                                  NAMES
0b0a90dc050b   nginx:1.10   "nginx -g 'daemon of…"   About a minute ago   Up About a minute   0.0.0.0:80->80/tcp, :::80->80/tcp, 443/tcp             nginx

转到 /nginx/html/ 目录下,vi index.html,编辑用于显示的文件(必须使用vi,使用vim提示找不到)
<h1>steinliving<h1>

6.在windows访问nginx的index.html

地址:192.168.56.100 ,默认端口是80,如果访问不到,检查网络是否畅通,防火墙是否打开了
该端口。可以查询Linux相关内容。

3.搭建域名环境

1.域名配置文件hosts路径:C:\Windows\System32\drivers\etc\hosts
        #配置steinliving,根据实际情况配置
        192.168.56.100    www.steinliving.com
2.完成测试,浏览器输入http://www.steinliving.com,显示页面

3.注意一个小细节,访问的url不要写成https://www.steinliving.com,不要带s,否则访问不到

注意:

如果在etc文件夹内不能修改,可以拷贝到桌面,修改完后,再覆盖回去。

有时配置好了也不能访问,可能是缓存原因,可以重启浏览器再来访问。

4.配置Nginx:完成反向代理

1.让Nginx完成反向代理,所有来自www.steinliving.com的请求都转到家居商品服务
SteinlivingCommodityApplication:9090/

- 暂时不使用网关,后面再整合,一步一步来

配置nginx:

server_name  配置访问nginx的ip地址

proxy_pass    反向代理

【微服务】一文读懂网关概念+Nginx正反向代理+负载均衡+Spring Cloud Gateway(多栗子)_nginx 网关_赵四司机的博客-CSDN博客

实现过程:

1.Linux的操作过程

1.找到nginx配置文件:default.conf

文件路径:/mydata/nginx/conf.d/default.conf  。

说明:这儿的文件位置是自己从linux的容器中拷贝过来的,然后再挂载到容器中的,所以是自定义的,在不同的项目中,就很可能不一样。

2.为了预防出错,将源文件拷贝一个副本,然后在副本中进行设置。

cp default.conf steinliving.conf     拷贝   源文件名   目的文件名

vi steinliving.conf                          编辑这个副本,就可以生效了。
 

        感觉不可思议,不查文件名的吗?

        解释来了,/mydata/nginx/conf/nginx.conf 代码里面有这么一句:

        http{

                //这儿的路径是容器里面的路径,linux的已经和它挂载关联

                include /etc/nginx/conf.d/*.conf; 

        }

        但是新问题又来了,他们不冲突吗?T_T

:wq                                               保存退出

docker restart nginx                     重启nginx

docker ps                                     查看确认是否正常运行

ping                               保证反向代理的ip地址是通畅的

通常ping不同的原因是防火墙。可以看看windows防火墙设置,直接暂时关闭windows防火墙。

通常关闭“共用网络”的防火墙就可以了。“打开”-->"关闭"

2.通过Xshell来操作Linux启动镜像。

1.启动VirtrualBox

(2.原来是通过cmd启动vagrant来操作的)

2.现在通过Xshell来操作

登录

其余参考上面(1.Linux的操作过程)的步骤。

server_name  www.steinliving.com //除了配置成ip地址,也可以填这样的域名

location / {

        proxy_pass http://192.168.56.1:9090;  //注意这儿的分号

}

:wq   保存退出

ping 192.168.56.1   会发现ping不同,原因是windows的防火墙,关闭它或者放行对应端口

docker restart nginx   重启nginx,使配置生效

测试:浏览器地址栏输入:www.steinliving.com  可以正常访问页面。

5.配置负载均衡到网关

需求分析/图解
1、配置负载均衡到网关,即加入网关实现负载均衡
2、请求->nginx->网关->真正的服务

实现:

一、配置nginx

这儿就可以配置多个服务,用来做负载均衡。

1)vi  /mydata/nginx/conf/nginx.conf  //找到并配置该文件。可以看作主配置文件

http {
    #gzip on;
    upstream steinliving {  //上游服务器,steinliving是自定义的名称
        server  192.168.56.1:5050;  //配置微服务的ip地址
    }
}

upstream 里面的内容是自己添加上去的,原配置文件里面没有。

配置的是网关的ip,可以配置多个网关。

踩坑记录:

1、注意分号";",之前没写,导致nginx无法重启。

2、网关的端口5050写成了5000,找了半天才发现。

2)vi /mydata/nginx/conf/conf.d/steinliving.conf  //配置引用上面的“上游服务器”

server{
    location / {
	    proxy_pass http://steinliving;
    }
}

3) sudo docker restart nginx    //重启nginx,使配置生效

    docker ps 查看是否启动成功。已经出现几次配置错误,导致无法启动的情况发生。

4)测试,浏览器登录www.steinliving.com,结果出现错误页面。是因为还没有在网关配置路由。

二、配置网关——添加一组路由

1)找到自己java项目里面的steinliving-gateway模组,找到application.yml文件进行配置

spring:
  cloud:
    gateway:
      routes: 
        //添加到该路由的最后。
        - id: steinliving_host_route
          uri: lb://steinliving-commodity
          predicates:
            - Host=**.steinliving.com

2)重启网关Gateway模组,再访问,会依然错误,因为nginx在转发请求到网关丢掉一些信息,比如host,因此需要重新配置

三、再次配置Nginx

1)再次修改nginx的配置,设置保留host信息,vi /mydata/nginx/conf/conf.d/steinliving.conf

    location / {
        proxy_set_header Host $host;   //添加这一句
        proxy_pass http://steinliving;
    }

 2)记得重启nginx使配置生效

 3)测试:浏览器登录www.steinliving.com测试是否能够正确登录页面。此时的网络构架已经是nginx+gateway了。

注意事项和细节:

      不要把Host路由配置到前面,否则按照域名+api方式的路由就不会成功了,因为会优先匹配到Host。主要是有个从上往下的匹配顺序的问题。


6.配置动静分离

实现:

1、完善index.html页面的动静分离

1)在Nginx创建static目录

在/mydata/nginx/html目录下创建static目录

2)把后端的静态资源,保存到static目录里面

D:\steinliving\steinliving-commodity\src\main\resources\static\ 把目录下所有静态资源文件,上传到Nginx下的static目录,然后删除
D:\steinliving\steinliving-commodity\src\main\resources\static\ 下的所有文件
这样才能生效,否则还是走的原来的路径。

3)rebuild(这样可以把target里面的副本删除),重启hspliving-commodity模块,访问首页面,会出现没有图片的情况。如果还看到图片,是因为缓存原因,可以换个浏览器,或者禁用缓存。

4)对index.html和list.html模板文件访问静态资源路径进行替换修改

先把index.html里面涉及静态文件的路径,由' "index '替换为' /static/index/。

采用 “index 替换 "/static/index的方法进行。

ctrl+r替换快捷键,replace。或者在IDEA的Edit->Find->Replace里面

这样做的原因是,之前会自动到static目录寻找,现在在本地找不到了,就不能省略static了

5)对Nginx进行配置-回顾笔记

 找到配置文件去设置vi steinliving.conf

server{
    location /static/ {  //添加这个代码段
        root /usr/share/nginx/html;
    }
}

说明
(1)这个路径就是默认访问路径
(2)该默认路径,已经挂载到mydata/nginx/html下

6)重启Nginx
docker restart nginx

7)重启steinliving-commodity服务,这时访问页面,就正常了,也实现了动静分离

2、完善list.html页面的动静分离

重复一的

(4)把("search)替换为("/static/search/)

注意,这儿还有一个(./search)替换为(/static/search)
        ./search

踩坑:替换添加/static的时候,把"前面的双引号漏掉了,导致页面错误。重新添加后恢复正常。

(5)设置vi steinliving.conf 内容同上

配置首页点击分类到检索页面

存在的问题:登录首页面index.html,点击分类,自动跳转到list.html页面时,地址栏还是用的:localhost:9090/list.html?catalog3ld=301的方式跳转的,没有经过nginx,导致无法显示静态内容。

解决办法:

1、修改catalogLoader.js
文件路径:/mydata/nginx/html/static/index/js
vi catalogLoader.js

var cata3link = $("<a href=\"http://localhost:9090/list.html?catalog3Id=" + ctg3.id + "\" style=\"color: #999;\">" + ctg3.name + "</a>");

把其中的http://localhost:9090删除,保留"/list"及后面的部分

2、具体修改,参考javaweb讲过的WEB路径专题

“/”在前端解析为ip+端口/

“/”在后端解析为ip+端口/+工程项目/

修改完成后,便可正常访问页面了。

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

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

相关文章

Rasa:使用大语言模型进行意图分类

Rasa:使用大语言模型进行意图分类 在Rasa的最新版本(3.x)中,引入了一种新的意图分类方法,即使用大型语言模型(LLM)和一种称为检索增强生成(RAG)的方法进行意图分类。 LLM意图分类器是一种全新的意图分类器,利用大型语言模型(LLM)来对意图进行分类。LLM意图分类器…

汽车租赁系统设计与实现

汽车租赁系统 1&#xff0e;需求分析 1.1任务概述 1.2开发环境和使用技术 1.3数据库设计 2&#xff0e;登陆模块 2.1登陆页面的代码是&#xff1a; 2.2登录类login.java的代码如下&#xff1a; 2.3LoginServlet.java的代码如下&#xff1a; 3&#xff0e;公共…

ESP-IDF学习——1.环境安装与hello-world

ESP-IDF学习——1.环境安装与hello-world 0.前言一、环境搭建1.官方IDE工具2.vscode图形化配置 二、示例工程三、自定义工程四、点灯五、总结 0.前言 最近在学习freertos&#xff0c;但由于买的书还没到&#xff0c;所以先捣鼓捣鼓ESP-IDF&#xff0c;因为这个比Arduino更接近底…

神秘字符(acm模式)

#include<iostream> #include<cctype> #include<string> using namespace std; int main() {int n;cin >> n;getchar();while (n--){string str, str1, str2"";//cin >> str >> str1;getline(cin, str);//遇到换行符就忽略&…

GB28181学习(五)——实时视音频点播(信令传输部分)

要求 实时视音频点播的SIP消息应通过本域或其他域的SIP服务器进行路由、转发&#xff0c;目标设备的实时视音频流宜通过本域的媒体服务器进行转发&#xff1b;采用INVITE方法实现会话连接&#xff0c;采用RTP/RTCP协议实现媒体传输&#xff1b;信令流程分为客户端主动发起和第…

CCC数字钥匙设计【BLE】--PE进入流程建立BLE加密连接

1、PE进入流程 PE进入的流程大体可以拆解为如下步骤&#xff1a; 1、手机与车端建立BLE加密连接&#xff1b; 2、创建URSK流程&#xff1b; 3、时间同步流程&#xff1b; 4、UWB测距流程&#xff1b; 5、根据各锚点BLE的RSSI及UWB的距离值&#xff0c;通过定位算法进行手…

Android 图片加载框架Glide源码详解

我们看Glide的源码从Glide类入手&#xff0c;使用的时候我们先调用的with方法&#xff0c;源码中with有3个多载的方法&#xff1a;下图翻译过来就是activity用FragmentActivity Applicationcontext用 with&#xff08;Context&#xff09;还有一个with&#xff08;View)的 殊途…

西瓜书读书笔记整理(六)—— 第六章 支持向量机

第六章 支持向量机 6.1 间隔与支持向量6.1.1 什么是支持向量机6.1.2 支持向量与间隔6.1.3 支持向量机的求解过程 6.2 对偶问题&#xff08;dual problem&#xff09;6.2.1 什么是对偶问题6.2.2 如何求解支持向量机的对偶问题 6.3 核函数&#xff08;kernel function&#xff09…

基于Xml方式的Bean的配置-Bean的作用范围scope配置

SpringBean的配置详解 Bean的配置范围 默认情况下&#xff08;基本的Spring环境&#xff09;&#xff0c;单纯Spring环境Bean的作用范围有两个&#xff1a;Singleton和prototypesingleton:单例&#xff0c;默认值&#xff0c;Spring容器创建的时候&#xff0c;就会进行Bean的实…

【VS Code】根据时间和文件名查看增删改的历史记录

我的 VS Code 已设置为自动保存。 左下角这个 TIMELINE 里面记录着我们使用 VS Code 操作各文件的历史记录。 打开 Local History 可以根据时间和文件名查看增删改的历史记录&#xff0c;比如&#xff1a; 然后我们根据时间和文件名&#xff0c;打开一个文件&#xff1a; 即可…

讲座1:影像重建_脑疾病_大脑解码

视频来源&#xff1a;https://www.bilibili.com/video/BV11K4y1979o/?spm_id_from333.999.0.0&vd_source897075bbdd61e45006d749612d05a2ab 文章目录 Image Reconstruction and SegmentationMR Image ReconstructionBrain ROI Segmentation Brain Disease --- Alzheimers…

嵌入式开源组件——LwRB(RingBuffer)的移植和应用

说明&#xff1a;记录自己学习的过程&#xff0c;如有理解上的错误或者不恰当的地方请原谅。 一、简介 LwRB 是一个针对嵌入式系统优化的通用FIFO&#xff08;先进先出&#xff09;缓冲区库&#xff0c;之前的名称叫做RingBuffe &#xff0c;不知道作者在V2.0.0版本时&…

C++11线程库简介

前言 在c11之前涉及多线程的问题都是和平台相关的&#xff0c;比如windows和linux都有一套自己的接口&#xff0c;这使得代码的可移植性变差。C11中最重要的特性就是对线程进行了支持&#xff0c;使得C在编程时不再依赖第三方库&#xff0c;而且原子操作中还引入了原子类的概念…

消息队列(六):服务器设计

紧接着上一章没说完的进行服务器的补充。 推送给消费者消息的基本实现思路 让 brokerServer 把哪些消费者管理好收到对应的消息&#xff0c;把消息推送给消费者 消费者是以队列为维度来订阅消息的&#xff0c;一个队列可以有多个消费者&#xff08;此处我们约定按照轮询的方…

HTTP协议(超级详细)

HTTP协议介绍 基本介绍&#xff1a; HTTP&#xff1a;超文本传输协议&#xff0c;是从万维网服务器传输超文本到本地浏览器的传送协议HTTP是一种应用层协议&#xff0c;是基于TCP/IP通信协议来传送数据的&#xff0c;其中 HTTP1.0、HTTP1.1、HTTP2.0 均为 TCP 实现&#xff0…

激光焊接汽车PP塑料配件透光率测试仪

随着汽车主机厂对车辆轻量化的需求越来越强烈&#xff0c;汽车零部件轻量化设计、制造也成为汽车零部件生产厂商的重要技术指标。零部件企业要实现产品的轻量化&#xff0c;在材料指定的情况下&#xff0c;要通过产品设计优化、产品壁厚减小和装配方式的优化来解决。使用PP材料…

React 把useState变成响应式 ,今天又可以早点下班了

Ⅰ、前言 我们知道 React 中 , 要想修改 「状态」 > 必须要「state &#xff0c; setState」 useState() 中「setState」 去修改 > 「state」那么如果用 Proxy > 去改造 useState&#xff0c;那么 「摸鱼的时间」又增加啦 &#xff1f; Ⅱ、proxy 改造 useState 首…

数据结构与算法之Floyd算法-最短路径问题

Floyd算法-最短路径问题 Floyd算法-最短路径问题算法结束算法思想算法效率分析 Floyd算法-最短路径问题 算法结束 Floyd算法&#xff1a;求出每一对顶点之间的最短路径 核心&#xff1a;使用动态规划思想&#xff0c;将问题的求解分为多个阶段&#xff1a; 对于n个顶点的图…

数据结构---绪论

&#x1f31e;欢迎来到数据结构的世界 &#x1f308;博客主页&#xff1a;卿云阁 &#x1f48c;欢迎关注&#x1f389;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; &#x1f31f;本文由卿云阁原创&#xff01; &#x1f4c6;首发时间&#xff1a;&#x1f339;2023年9月17日&…

HTTP代理反爬虫技术详解

HTTP代理是一种网络技术&#xff0c;它可以将客户端的请求转发到目标服务器&#xff0c;并将服务器的响应返回给客户端。在网络安全领域中&#xff0c;HTTP代理经常被用来反爬虫&#xff0c;以保护网站的正常运营。 HTTP代理反爬虫的原理是通过限制访问者的IP地址、访问频率、U…