Nginx配置二级目录反向代理本机不同端口

🧩 背景

最近在家里的服务器上安装了一堆服务应用,比如:

  • GitLab
  • Apache
  • Jenkins

由于它们都需要通过 Web 访问,又各自绑定不同端口,访问起来就显得十分繁琐:

1
2
3
http://192.168.1.2:8080
http://192.168.1.2:15672
http://192.168.1.2:8090

👉 每次都要记 IP+端口号,实在不方便。

于是想到使用 Nginx 来解决这个问题!


📘 简介:为什么选择 Nginx?

Nginx 主要作用:

  • 🔁 反向代理
  • 📦 负载均衡

本次只使用它的反向代理功能,让用户通过如下形式来访问服务:

1
2
3
http://192.168.1.2/gitlab
http://192.168.1.2/file
http://192.168.1.2/jenkins

无需再关心具体端口!


⚙️ 安装 Nginx

✅ 推荐方式(省事)

使用系统包管理器直接安装:

📦 Ubuntu / Debian 系统:

1
2
sudo apt-get update
sudo apt-get install nginx

📝 如果你追求最新版本,可以从 Nginx 官网 下载源码自行编译安装。


🔁 Nginx 配置反向代理

编辑配置文件(路径:/etc/nginx/conf.d/default.conf):

1
sudo vim /etc/nginx/conf.d/default.conf

📄 示例配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
upstream gitlab {
server 192.168.1.2:8098;
}

upstream apache {
server 192.168.1.2:8090;
}

upstream rabbit {
server 192.168.1.2:15672;
}

server {
listen 80;
server_name localhost;
charset utf-8;

# Apache 文件服务器:/file
location /file {
proxy_pass http://apache/;
}

# RabbitMQ 管理后台:/rabbit
location /rabbit {
proxy_pass http://rabbit/;
port_in_redirect on;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

# Jenkins:/jenkins
location /jenkins {
proxy_pass http://192.168.1.2:8088/jenkins/;
# 解决 Jenkins 反向代理报错
port_in_redirect on;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

# 默认首页访问 GitLab
location / {
proxy_pass http://gitlab/;
}
}

✅ 总结

Nginx 是一个非常强大的工具,本次配置只是它众多功能的一小部分。

⚠️ 注意事项:

  • Jenkins 的反向代理配置不能只写 proxy_pass,否则会报错:

    It appears that your reverse proxy set up is broken

    ➤ 需要补充 proxy_redirectproxy_set_header 相关配置。

  • 通过 Nginx 反代后的 Jenkins 默认登录功能可能异常(如跳转到 /j_acegi_security_check 报 404)

    如果只是家用,可以在 Jenkins 中关闭安全认证:

    1
    Manage Jenkins → Configure Global Security → 取消勾选 “启用安全”