记录一次Nginx的使用过程

一、Docker安装配置nginx

1.拉取镜像
docker pull nginx
2.创建挂载目录

启动前需要先创建Nginx外部挂载目录文件夹
主要有三个目录

  • conf:配置文件目录
  • log:日志文件目录
  • html:项目文件目录(这里可以存放web文件)

创建挂载目录

# 创建挂载目录
mkdir -p /home/nginx/conf
mkdir -p /home/nginx/log
mkdir -p /home/nginx/html

需要授权文件夹,防止nginx操作文件夹权限不足

chmod 777 /home/nginx/conf
chmod 777 /home/nginx/log
chmod 777 /home/nginx/html
3.挂载目录

挂载操作会直接将两个文件夹内容同步,若是直接用宿主机的空文件夹直接挂载到容器内部的配置文件目录上,会造成nginx容器配置文件目录被同步为空文件夹,进而导致容器启动失败。
因此我们需要启动一遍容器,将初始配置拷贝出来

创建初始化容器

docker run -itd --name nginx -p 80:80  nginx

复制容器配置文件到宿主机

docker cp nginx:/etc/nginx /home/nginx/conf

删除容器

# 直接执行docker rm nginx或者以容器id方式关闭容器
# 找到nginx对应的容器id
docker ps -a
# 关闭该容器
docker stop nginx
# 删除该容器
docker rm nginx# 删除正在运行的nginx容器
docker rm -f nginx
4.启动容器
docker run \
-p 80:80 \
--name nginx \
-v /home/nginx/conf:/etc/nginx \
-v /home/nginx/log:/var/log/nginx \
-v /home/nginx/html:/usr/share/nginx/html \
-d nginx
5.修改配置文件

nginx.conf内容如下,主要是对各种配置进行映射,其中的目录是Docker容器中的目录,可以根据挂在目录映射进行相应的修改。

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

基础的操作可以在conf.d目录下的conf文件配置即可。
配置修改后,需要重启nginx容器才能使配置生效。

user  root;
worker_processes  auto;error_log  /var/log/nginx/error.log notice;
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;include /etc/nginx/conf.d/*.conf;
}

default.conf

    server {listen       80;  #监听的端口server_name  localhost;  location / {# 路径匹配之后,哪个目录下去匹配相应的网页,html是相对路径root   html;index  index.html index.htm;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}location /api/ {#反向代理proxy_pass http://loaclhost:8088/api/;}}

二、Nginx反向代理失败出现了跨域问题

问题描述:
通过以上配置,前端页面在浏览器上已经可以访问了,但是在访问后端页面的时候出现了跨域问题。

解决过程:
此时非常的疑惑,反向代理不是可以解决跨域问题吗?
于是,我在后端加上了跨域的配置,还是无法访问。
然后分析,我的Nginx是部署在Docker上面的,但是后端Java服务是直接在Linux中用jar包运行的。在Docker容器中配置的localhost是否会找不到服务器中的localhost?于是换成了ip地址,仍没有解决。
然后看了下Nginx反向代理的原理:

  • 浏览器发送请求给nginx,nginx把请求转发给目标服务
  • 服务端向外暴露的是Nginx的监听地址和端口

到这里明白是什么问题了,我在前端的访问端口是后端项目的端口,而非nginx的监听端口

解决方案:

  1. 由于之前nginx配置的监听端口是80端口需要修改,因此需要给nginx容器添加一个映射端口
  2. 将前端的请求地址替换为nginx的监听地址

三、Nginx部署vue项目后,刷新报404

当使用Nginx部署vue项目时,刷新页面可能导致无法找到页面的问题,这是由于Vue Router使用了前端路由的方式导致的。要解决这个问题可以进行以下配置

server {listen    8020;server_name  localhost;location / {root   /usr/share/nginx/html;#需要指向下面的@router否则会出现vue的路由在Nginx中刷新出现404try_files $uri $uri/ @router;index  index.html index.htm;}location /api/ {proxy_pass http://localhost/api/;}#对应上面的@router,主要原因是路由的路径资源并不是一个真实的路径,所以无法找到具体的文件#因此需要rewrite到index.html中,然后交给路由再处理请求资源location @router {rewrite ^.*$ /index.html last;}}

四、给Docker容器添加映射端口

有些时候我们在创建容器时就已经想好了这个容器内部端口映射哪些外部端口
但是,随着业务的变化我们可能需要添加新的端口信息,以供外部访问!

1.查看容器的端口映射情况
docker port 容器id

image.png

2.查询容器在本机的位置
docker inspect 容器

image.png

进入容器目录需要修改2个文件

  • config.v2.json
  • hostconfig.json
3.关闭Docker进程

关闭Docker进程

service docker stop
#或
systemctl stop docker

查看Docker进程是否还在运行

ps -aux|grep docker

【注】
此时不能运行Docker的命令,不然程序会自动启动

4.修改配置文件
1)修改config.v2.json

找到Config–>ExposedPorts,里面添加想要的端口号
image.png

2)修改配置hostconfig.json

找到PortBindings参数内添加信息
image.png

然后启动Docker即可

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

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

相关文章

oslo_i18n学习小结

背景 代码均为开源代码 基于yoga版本,需要对openstack某服务做翻译,了解到oslo_i18n有翻译功能,配置oslo_i18n来给组件进行翻译 用法 用法 每个服务自己会带一个i18n.py的文件,如果要对日志进行翻译,从i18n导入_&…

逆变-TI视频课笔记

目录 1、全桥逆变 1.1、全桥逆变SPWM仿真 2、半桥逆变 2.1、本课小结 3、多重逆变(间接的“交-直-交-直”变流) 3.1、多电平逆变的目的 3.2、单逆变桥 3 电平控制时序 3.3、大功率设备的功率因数 3.4、本课小结 视频链接:文字…

算法训练(leetcode)第二十八天 | 509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯

刷题记录 509. 斐波那契数递归循环动态规划 70. 爬楼梯746. 使用最小花费爬楼梯 509. 斐波那契数 leetcode题目地址 递归 时间复杂度&#xff1a; O ( n ) O(n) O(n) 空间复杂度&#xff1a; O ( n ) O(n) O(n) // c class Solution { public:int fib(int n) {if(n<2)…

Kafka配置SSL信道加密

kafka配置SASL认证 Kafka单机配置SSL认证 使用脚本生成SSL证书 执行ssl.sh # 配置SSL配置文件 cp server.properties ssl.properties# 修改配置文件SSL内容 listenersSSL://kafka-test:9092 advertised.listenersSSL://kafka-test:9092 ssl.keystore.location/root/config/cer…

linux中vim切换输入中文

linux中vim切换输入中文 遇到问题 在虚拟机linux下vim 编辑器中注释的时候无法使用中文 解决方案 Linux系统中的vim编辑器中安装中文输入法软件包 1.在终端中输入以下命令 sudo apt-get install fcitx fcitx-bin fcitx-table-wubi fcitx-table-wbpy2. 安装完成后&#xf…

Zed 编辑器发布了原生 Linux 版本

由 Rust 编写、GPU 加速的 Zed 文本编辑器终于提供了正式的 Linux 原生版本&#xff01;在过去的几个月里&#xff0c;Zed 的 Linux 支持取得了长足的进步&#xff0c;现在已经进入了更正式的阶段。 今天&#xff0c;这款由前 Atom 开发人员创建的现代开源代码编辑器现在在 Li…

vue vite+three在线编辑模型导入导出

文章目录 序一、1.0.0版本1.新增2.编辑3.导出4.导入 二、2.0.0版本1. 修复模型垂直方向放置时 模型会重合4. 修复了导出导入功能 现在是1:1导出导入5. 新增一个地面 视角看不到地下 设置了禁止编辑地面 地面设置为圆形6. 新增功能 可选择基本圆形 方形 圆柱形等模型以及可放置自…

HUGS环境配置

1. 介绍 HUGS: Holistic Urban 3D Scene Understanding via Gaussian Splatting 基于 RGB 图像对城市场景进行整体理解是一个具有挑战性但又很重要的问题。它包括理解几何和外观&#xff0c;以实现新颖的视图合成、解析语义标签和跟踪移动物体。尽管取得了长足的进步&#xf…

C# 的TaskScheduler

在C#中&#xff0c;TaskScheduler 是一个抽象类&#xff0c;用于控制任务的执行方式&#xff0c;特别是它们如何被安排到线程池中的线程上执行。 TaskScheduler 负责将 Task 对象排队并决定何时、以何种方式执行这些任务。 TaskScheduler 的作用 调度任务&#xff1a;将任务…

querylist多线程采集curlMulti时,报错Curl error(60)

前言 在使用querylist多线程采集的时候&#xff0c;报错: Curl error(60)。测试了下用http时没有问题&#xff0c;https时有问题。其原因在于多线程采集库引用的另一个库有问题。需要手动更改。 解决 找到&#xff1a;vendor/ares333/php-curl/src/Curl.php 文件&#xff0c…

网络 闲聊

闲谈 闲话 网络安全——>网络空间安全 网络空间&#xff1a;一个由信息基础设备组成互相依赖的网络 继&#xff1a;海、陆、空、天、的第五大空间 信息安全的一个发展&#xff1a; 通信保密阶段---计算机安全---信息系统安全---网络空间安全 棱镜门事件 棱镜计划&…

Visual Studio Code:深度解析与开发者的新宠

在计算机行业中&#xff0c;开发工具的选择至关重要&#xff0c;它直接影响到开发者的效率和项目的质量。近年来&#xff0c;Visual Studio Code&#xff08;简称VSCode&#xff09;凭借其强大的功能和灵活的定制性&#xff0c;在众多编辑器中脱颖而出&#xff0c;成为了开发者…

linux系统php开机自启动 phpfpm

1、关闭当前的php环境&#xff0c;运行命令&#xff0c;下面二选一&#xff0c;根据你自己情况来选 service php-fpm stop 或 systemctl stop php-fpm 2、运行命令vim /etc/systemd/system/phpfpm.service&#xff0c;输入以下代码,注意php-fpm路径需要改成自己的路径 [Unit]…

Redis原子计数器incr,防止并发请求

一、前言 在一些对高并发请求有限制的系统或者功能里&#xff0c;比如说秒杀活动&#xff0c;或者一些网站返回的当前用户过多&#xff0c;请稍后尝试。这些都是通过对同一时刻请求数量进行了限制&#xff0c;一般用作对后台系统的保护&#xff0c;防止系统因为过大的流量冲击…

Twitter API 使用教程:入门到实践

Twitter API为开发者提供了丰富的接口&#xff0c;用于访问Twitter上的公开数据和实现特定功能。从获取推文到用户认证&#xff0c;Twitter API在数据挖掘、社交分析和应用开发中扮演着重要角色。 关键词 Twitter API, 开发者指南&#xff0c;社交媒体&#xff0c;数据访问 …

elementary os 8 2024年07月新动态

具体信息请登录官网查询 **OS 7更新** Photos 8已经作为Flatpak应用发布到AppCenter。这意味着你可以通过从AppCenter安装Flatpak版本来继续接收Photos的更新&#xff0c;即使在旧版本的elementary OS上&#xff0c;而且Photos现在也很容易为那些运行除elementary OS之外的Lin…

Java中的Set系列集合超详解

Set List是有序集合的根接口&#xff0c;Set是无序集合的根接口&#xff0c;无序也就意味着元素不重复。更严格地说&#xff0c;Set集合不包含一对元素e1和e2 &#xff0c;使得e1.equals(e2) &#xff0c;并且最多一个空元素。   使用Set存储的特点与List相反&#xff1a;元素…

腾讯云如何设置二级域名?

什么是二级域名&#xff1f; 例如我已申请的域名为&#xff1a; test.com //顶级域名 现在我开发的应用要部署到二级域名&#xff1a; blog.test.com 1、打开腾讯云控制台的我的域名&#xff0c;然后点击解析 2、在我的解析页面点击添加记录&#xff0c;然后需注意红色方框处…

生物素标记的柚皮苷探针;Biotin-Naringin

生物素标记的柚皮苷探针&#xff08;Biotin-Naringin&#xff09;是一种结合了生物素&#xff08;Biotin&#xff09;和柚皮苷&#xff08;Naringin&#xff09;特性的化合物&#xff0c;它在有机合成及药物化学技术领域具有重要意义。以下是对该探针的详细解析&#xff1a; 一…

秋招Java后端开发冲刺——Mybatis

一、基本知识 1. 介绍 MyBatis 是 Apache 的一个开源项目&#xff0c;它封装了 JDBC&#xff0c;使开发者只需要关注 SQL 语句本身&#xff0c;而不需要再进行繁琐的 JDBC 编码。MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java POJO&#xff08;Plain …