我正在尝试在 Ubuntu Server 18.04 上配置 VPS,我已经安装了 GOGS、JENKINS 和 TOMCAT。使用 Nginx,我只允许发出 https 请求,但当我从 Insomnia 向部署在 Tomcat 中的 api web 服务发出请求时,我收到消息“无法使用给定的 ca 证书对对等证书进行身份验证”。这与我在 Gogs 存储库中推送提交时的消息相同。ssl 证书由 CA 签名。我不知道发生了什么,但我分享了 Nginx 和 Gogs 配置以开始使用。
Nginx 配置:
upstream tomcat {
server 127.0.0.1:8081 weight=100 max_fails=5 fail_timeout=5;
}
server {
listen 443 ssl;
server_name serverName;
ssl_certificate /etc/nginx/ssl/certificate.crt;
ssl_certificate_key /etc/nginx/ssl/certificate.key;
root /var/www;
index index.php;
# TOMCAT8
location /manager {
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://tomcat/manager;
}
location /test {
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://tomcat/test;
}
location ~ \.jsp$ {
proxy_pass http://127.0.0.1:8081;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Server-Proto $server_protocol;
}
# GOGS
location /gogs/ {
# Proxy headers
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
# Log files
access_log /var/log/nginx/gogs.access.log;
error_log /var/log/nginx/gogs.error.log;
# Redirect
proxy_pass http://localhost:3000/;
}
}
Gogs 服务器配置:
[server]
DOMAIN = localhost
HTTP_PORT = 3000
ROOT_URL = https://serverName/gogs/
DISABLE_SSH = false
SSH_PORT = 22
START_SSH_SERVER = false
OFFLINE_MODE = false
答案1
一周后,我找到了问题的解决方案。错误在于 certificate.crt 文件没有连接 CA 签名。
我不知道,但对于 Nginx,需要将所有证书合并到一个文件中。域的证书 (*.crt) 必须首先列在文件中,然后是 CA 证书链 (*.ca-bundle)。我只放了我的域的证书 (*.ctr),因此找不到 CA 颁发机构。
我通过使用以下 Linux 命令将两个证书连接成一个来使其工作:
cat certificate.ca-bundle >> certificate.crt