swagger 访问nginx 问题解决

本文详细记录了通过调整Nginx配置解决Swagger无法访问的问题过程,包括正确设置代理、主机名和端口,确保Swagger能够正常工作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

服务架构

 

loadbalance层配置

nginx初始配置

server {
    listen       443;
    server_name  xxx.com;
    ssl on;
    ssl_certificate /etc/nginx/conf/xxx.com.pem;
    ssl_certificate_key /etc/nginx/conf/xxx.com.key;
    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers         HIGH:!aNULL:!MD5;

    #charset koi8-r;
    #access_log  /var/log/nginx/host.access.log  main;

    #location / {
    #    root   /usr/share/nginx/html;
    #    index  index.html index.htm;
    #}

   location / {
       proxy_pass http://x x x:y;
       proxy_set_header  X-Real-IP  $remote_addr;
       proxy_set_header X-Forwarded-For $remote_addr;
   }
}

测试后发现, 直接命令行curl xxx.com 或者 浏览器访问都是正常的,但是swagger无法访问

开始解决问题

页面检查发现swagger 访问的地址 变成了x x x:y, 可以确定是 代理 或请求转发 有问题,

从nginx作手 尝试 增加对 host 的绑定

server {
    listen       443;
    server_name  xxx.com;
    ssl on;
    ssl_certificate /etc/nginx/conf/xxx.com.pem;
    ssl_certificate_key /etc/nginx/conf/xxx.com.key;
    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers         HIGH:!aNULL:!MD5;

   location / {
       proxy_pass http://x x x:y;
       proxy_set_header Host $host;
       proxy_set_header  X-Real-IP  $remote_addr;
       proxy_set_header X-Forwarded-For $remote_addr;
   }
}

 

reload 之后 使用swagger访问 发现 访问地址变成了xxx.com:y, 设置代理的时候把端口 带上了,

尝试 指定 协议 和 代理端口

server {
    listen       443;
    server_name  xxx.com;
    ssl on;
    ssl_certificate /etc/nginx/con/xxx.com.pem;
    ssl_certificate_key /etc/nginx/conf/xxx.com.key;
    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers         HIGH:!aNULL:!MD5;

   location / {
       proxy_pass http://xxx:y;
       proxy_set_header Host $host;
       proxy_set_header  X-Real-IP  $remote_addr;
       proxy_set_header X-Forwarded-For $remote_addr;
       #proxy_set_header Host $host:$server_port;
       proxy_set_header X-Forwarded-Proto $scheme;
       proxy_set_header X-Forwarded-Port $server_port;
   }
}

内部nginx配置

server {
    listen       y;
    server_name  xxx;

   location / {
       proxy_pass http://xxx:y;
       proxy_set_header  X-Real-IP  $remote_addr;
       proxy_set_header X-Forwarded-For $remote_addr;
   }
}

 

reload 之后 使用swagger访问, 此时已经可以正常返回

 

配置参考:https://github.com/abel1225/DevOps-Configuration/blob/master/nginx/config/nginx-swagger.conf

### 配置 Nginx 支持 Swagger API 文档 为了使 Nginx 能够支持并优化对 Swagger API 文档的访问,可以按照以下方式调整 `nginx.conf` 文件中的设置: #### 注释无关配置项 在生产环境中仅开放80端口的情况下,如果希望通过Nginx而非Tomcat直接访问Swagger,则需先注释掉可能干扰正常工作的部分配置选项,比如根目录(`root`)声明以及针对`.html`文件的任何特定缓存策略[^1]。 ```nginx # nginx.conf 中的部分片段展示 http { ... # 关闭必要的 root 定义和 HTML 缓存规则 # root /path/to/root; # location ~* \.(?:manifest|appcache|html?|xml|json)$ { # expires -1; # } } ``` #### 设置反向代理路径 为了让外部能够顺利获取到位于内部服务器上的Swagger资源(如UI页面、API文档等),应当创建专门的位置匹配规则,并将其指向实际提供这些资源的服务地址。这通常涉及到几个关键位置的定义,包括但限于`swagger-ui.html`入口页及其关联的数据接口[^4]。 ```nginx server { listen 80; server_name yourdomain.com; location /api-docs/ { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_pass http://localhost:{your_service_port}/; # 对于 swagger 的具体资源做更细致的转发设定 location /api-docs/swagger-ui.html { proxy_pass http://localhost:{your_service_port}/swagger-ui.html; } location /api-docs/v2/api-docs { proxy_pass http://localhost:{your_service_port}/v2/api-docs; } location /api-docs/swagger-resources { proxy_pass http://localhost:{your_service_port}/swagger-resources; } location /api-docs/webjars/ { proxy_pass http://localhost:{your_service_port}/webjars/; } } } ``` 上述配置中,假设Swagger相关资源部署在同一台机器的同端口上运行的应用程序内;其中 `{your_service_port}` 应替换为应用程序监听的实际端口号。此外,还设置了通用头部信息传递以确保请求能被正确路由至目标服务[^3]。 通过以上方法,即可实现利用Nginx作为前端网关来安全高效地暴露Swagger API文档供外界查阅的目的。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值