我使用Nginx作为反向代理来代理不同的网站,但不幸的是,我没有多个域名。因此,我想到了使用不同的URL来区分不同的网站。然而,我遇到了一个问题。下面是我的 Nginx 配置。此配置的目的是将所有以 domain.com/gogs/ 开头的请求代理到本地计算机上的端口 6023。 (显然,我正在端口 6023 上运行一个名为 gogs 的项目,该项目与 GitLab 类似,但这不是我要讨论的内容)。通过这样的配置,当我访问domain.com/gogs/时,系统正确重定向到后端服务,但是所有静态js、css等请求都会导致404,如何解决这个问题?
server {
listen 443 ;
server_name domain.com;
ssl on ;
ssl_certificate /data/certs/xxxxxxxxx.pem; # SSL cert
ssl_certificate_key /data/certs/xxxxxxxxx.key; # key
location /gogs/ {
proxy_pass http://127.0.0.1:6023/;
rewrite ^/gogs/(.*)$ /$1 break;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_buffering off;
proxy_redirect default;
proxy_redirect ~^/(.*)$ /gogs/$1;
}
}
server {
listen 80;
server_name domain.com;
return 301 https://$host$request_uri;
}
这里是我遇到404错误的资源,可以看到,大部分都是静态资源。 这是我的 gogs 服务的 docker compose 文件,可能会有点帮助。
version: "3"
services:
gogs:
restart: always # 自动重启
image: gogs/gogs
container_name: gogs
ports:
- '6022:22' # ssh 端口
- '6023:3000' # Web 访问端口
volumes:
- ./gogs-data:/data # 数据存储
我的需求比较简单,希望所有来自 /gogs/ 前缀的请求都会访问对应的后端服务,包括与该服务相关的静态资源请求。
这个问题你解决了吗?