黑马点评项目在开发环境中使用了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
版权归原作者 JAVA技术开发员 所有, 如有侵权,请联系我们删除。