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

JAVA技术开发员 2024-10-03 15:33:01 阅读 52

黑马点评项目在开发环境中使用了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

<code># 设置工作进程数,一般设置为服务器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.阶段总结

<code>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,如果自定义需要替换

<code> 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掉

查看端口占用: 

<code>netstat -ntulp | grep 8080

找到对应进程,kill掉

kill进程:

<code>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容器启动配置的是否正确防火墙端口是否开放。

<code>server {

# 监听端口

listen 8080;

#.....

}

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

防火墙确认打开

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

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

Nginx试图访问的路径是<code>/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



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。