【黑马点评上线】保姆级教程(一)——项目前端上传服务器,载入Nginx容器历程······

黑马点评项目在开发环境中使用了Windows版的nginx,当你要将其部署到Linux服务器上时,你需要重新下载适用于Linux系统的nginx版本。Windows和Linux系统之间存在底层架构和可执行文件格式的差异,因此不能直接将Windows上的nginx文件用于Linux服务器。

我在服务器端使用了docker快速部署了nginx容器,但是前端项目和配置文件都需要进行修改,下面就是我修改的思路历程。

一、上传本机nginx文件

1.上传nginx.conf文件

上传nginx.conf文件到自定义目录,我将整个这里nginx-1.18.0上传到了 /home/user/ 文件夹下

如果使用宝塔面板下载好的nginx,需要在其目录自行修改这些文件。如果和我一样使用docker容器里的nginx就不需要去改了

nginx.conf

# 设置工作进程数,一般设置为服务器CPU核心数
worker_processes  1;

# 设定NGINX的工作模式及连接数上限
events {
    worker_connections  1024; # 单个进程最大连接数
}

http {
    # 文件扩展名与MIME类型映射
    include       mime.types;
    # 默认类型为json,适合API接口响应
    default_type  application/json;
    # 开启高效文件传输模式
    sendfile        on;
    # 连接保持超时时间
    keepalive_timeout  65;

    # 配置服务器块
    server {
        # 监听端口
        listen       8080;
        # 服务器域名或IP
        server_name  localhost;

        # 静态资源服务配置,指定前端项目目录
        location / {
            root   html/hmdp; # 前端资源根目录
            index  index.html index.htm; # 默认主页文件
        }

        # 错误页面处理
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html; # 错误页面文件所在目录
        }

        # API接口反向代理配置
        location /api {  
            # 设置默认响应类型为json
            default_type  application/json;
            # 支持长连接,优化性能
            keepalive_timeout   30s;  
            keepalive_requests  1000;  
            # 配置以支持HTTP/1.1的Keep-Alive特性
            proxy_http_version 1.1;  
            # 重写URL去掉/api前缀
            rewrite /api(/.*) $1 break;  
            # 传递请求头到后端服务器
            proxy_pass_request_headers on;
            # 当后端服务器出现问题时的重试逻辑配置(此处被注释,表示使用默认)
            # proxy_next_upstream error timeout;
            # 将/api开头的请求代理到后端服务器集群,使用backend定义的服务器列表
            proxy_pass http://backend;
        }
    }

    # 后端服务器集群配置
    upstream backend {
        # 配置两台后端服务器,端口分别为8081和8082,具备故障转移和负载均衡能力
        server 127.0.0.1:8081 max_fails=5 fail_timeout=10s weight=1; # 最大失败次数、失败后暂停时间、权重
        server 127.0.0.1:8082 max_fails=5 fail_timeout=10s weight=1;
    }  
}
2.上传前端项目

如果上一步已经将本地的整个nginx文件夹上传到了服务器,那么这一步也不用做

使用宝塔面板下载好的nginx,需要在其目录里自行添加前端项目。

将本地的html整个文件目录上传到 /server/nginx/

这样nginx需要的文件基本都有了。

3.阶段总结

nginx.conf 是 Nginx 服务器的主要配置文件,它定义了服务器的全局和局部配置设置,用于控制 Nginx 如何处理请求、如何与其他服务交互以及如何提供静态内容或代理到后端服务器等。

Nginx 配置文件主要包括以下几个核心部分,我们可以结合您提供的配置示例来具体说明:

1. 全局配置
  • worker_processes: 指定 Nginx 工作进程的数量。例如:
    worker_processes 1;
2. 事件处理模型配置 (events)
  • worker_connections: 每个工作进程可以同时打开的最大连接数。
    events {
        worker_connections 1024;
    }
3. HTTP配置 (http)
3.1 MIME类型和默认类型
  • include: 引入MIME类型配置文件
  • http {
        include mime.types;
        default_type application/json;
    }
3.2 文件传输和连接保持
  • sendfile: 开启高效文件传输模式
  •     sendfile on;
        keepalive_timeout 65;
4. 服务器块 (server)
4.1 监听与服务器名称
  • listen: 指定服务器监听的端口
  • server {
        listen 8080;
        server_name localhost;
    }
4.2 静态资源服务
  • location: 配置如何处理特定的URL路径请求。
        location / {
           root html/hmdp; # 静态文件根目录
           index index.html index.htm; # 默认首页文件
        }
4.3 错误页面处理
  • error_page: 定义错误状态码对应的自定义错误页面。
        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
            root html;
        }
4.4 反向代理和负载均衡
  • location: 配置反向代理到后端服务器。
  • proxy_pass: 指定后端服务器地址。
  • upstream: 定义一组后端服务器。
        location /api {
            proxy_pass http://backend;
            # ...其他反向代理配置
        }
    
        upstream backend {
            server 127.0.0.1:8081 max_fails=5 fail_timeout=10s;
            server 127.0.0.1:8082 max_fails=5 fail_timeout=10s;
        }
5. 日志配置

虽然您提供的配置示例中没有直接展示日志配置,但通常Nginx配置还会包括错误日志和访问日志的配置,例如:

http {
    access_log /var/log/nginx/access.log combined;
    error_log /var/log/nginx/error.log warn;
    # ...
}

以上就是Nginx配置文件中一些核心部分的介绍及示例,实际配置会根据应用场景更加复杂和详细,包括但不限于Gzip压缩、SSL/TLS证书配置、缓存设置、限流策略等。

二、运行nginx容器

如果是服务器里的nginx,在其所在目录的命令行输入以下命令,重新加载nginx配置,使其生效。

nginx -s reload

 如果使用docker容器,那么就这样操作:使用最新版应该无妨

docker pull nginx:1.18.0

确保下载好images

 运行如下命令:我的目录在/home/user/nginx-1.18.0,如果自定义需要替换

 docker run -d -p 8080:8080  -v /home/user/nginx-1.18.0/html/hmdp:/etc/nginx/html/hmdp -v /home/user/nginx-1.18.0/html:/etc/nginx/html -v /home/user/nginx-1.18.0/conf/nginx.conf:/etc/nginx/nginx.conf  nginx:1.18.0

查看运行容器情况

docker ps

 如果没有则,检查是否意外exit

docker ps -a

并查看日志

docker logs 容器ID/name

运行成功

前端可以正常访问。

出现的错误:
1.容器以为端口被占用退出。

如果8080端口被占用:

那就是服务器里的nginx服务占用了8080端口,需要找到占用的进程ID,并且kill掉

查看端口占用: 
netstat -ntulp | grep 8080

找到对应进程,kill掉
kill进程:
sudo kill 进程ID
# 如果kill命令不起作用,尝试强制终止
sudo kill -9 进程ID

如果重启容器还是不行,那就说明依然有进程占用80端口,没有kill完,继续找对应进程ID,kill!

2.容器端口配置异常

检查nginx容器日志输出,查看原因

docker logs 容器ID/name

如果nginx正常启动,访问8080端口,没有任何反应,应该考虑端口是否匹配,和防火墙是否开放

这个项目里nginx配置文件nginx.conf中配置了,监听了8080端口,所以检查nginx.conf是否正确docker容器启动配置的是否正确防火墙端口是否开放。

server {
        # 监听端口
        listen       8080;
        #.....
}

8080:8080   (宿主机端口:容器端口)

防火墙确认打开

3.启动容器时挂载文件夹配置异常

-v /home/user/nginx-1.18.0/html:/etc/nginx/html(宿主机上的目录路径容器内的目录路径

Nginx试图访问的路径是/etc/nginx/html/hmdp/index.html,确保路径正确

# -v /home/user/nginx-1.18.0/html:/usr/share/nginx/html
-v /home/user/nginx-1.18.0/html:/etc/nginx/html

 需要仔细修改:

 docker run -d -p 8080:8080  -v /home/user/nginx-1.18.0/html/hmdp:/etc/nginx/html/hmdp -v /home/user/nginx-1.18.0/html:/etc/nginx/html -v /home/user/nginx-1.18.0/conf/nginx.conf:/etc/nginx/nginx.conf  nginx:1.18.0
  • 30
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JAVA技术开发员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值