rest - 我在使用 Nginx reverse_proxy 连接到我的 Rest-API 时收到 404
问题描述
我的云服务器 8084 端口上运行了一个 Rest-API。当我尝试访问 mysitename:8084/swagger-ui.html 时,可以看到 Swagger 的 Api Documentation 页面。但是,当我将其作为 mysitename.com/api/swagger-ui.html 尝试时,我收到 404 错误。
我在 StackOverflow 上阅读了很多关于这个问题的类似问题,我尝试了不同的解决方案,但我无法成功。
这是我的 nginx 配置文件
server {
listen 80;
listen [::]:80;
root /var/www/mysitename.com/html/;
index index.html index.htm index.nginx-debian.html;
server_name mysitename.com www.mysitename.com;
}
server {
listen 443;
server_name mysitename.com www.mysitename.com;
ssl_certificate /etc/letsencrypt/live/mysitename.com/cert.pem;
ssl_certificate_key /etc/letsencrypt/live/mysitename.com/privkey.pem;
ssl on;
ssl_session_cache builtin:1000 shared:SSL:10m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
ssl_prefer_server_ciphers on;
access_log /var/log/nginx/petahr.access.log;
location / {
root /var/www/mysitename.com/html/;
index index.html index.htm index.nginx-debian.html;
}
}
server {
listen 443;
server_name mysitename.com www.mysitename.com;
ssl_certificate /etc/letsencrypt/live/mysitename.com/cert.pem;
ssl_certificate_key /etc/letsencrypt/live/mysitename.com/privkey.pem;
ssl on;
ssl_session_cache builtin:1000 shared:SSL:10m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
ssl_prefer_server_ciphers on;
location /api/ {
proxy_set_header Host $host;
proxy_pass https://127.0.0.1:8084/;
proxy_read_timeout 90;
try_files $uri $uri/ =404;
}
}
编辑
这是nginx -T
输出
/etc/nginx/sites-available$ sudo nginx -T
nginx: [warn] conflicting server name "mysitename.com" on 0.0.0.0:443, ignored
nginx: [warn] conflicting server name "www.mysitename.com" on 0.0.0.0:443, ignored
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
如果你能帮助我,我将不胜感激。
解决方案
配置检查证实了Richard Smith的评论。只是一个警告,有两个服务器块具有相同的listen
和server_name
。
1)尝试将您的location /api/ {}
权利转移到您location / {}
的第二个服务器块的下方。
2)删除整个第三个服务器块
3) 如果您希望从 http 重定向到 https,return 301 https://$host$request_uri;
请在您的服务器块末尾添加监听端口 80。
4)nginx -T
再次运行以检查错误。
5) 如果没有发现错误,则重新加载 Nginx。
这是建议的服务器块配置文件:
server {
listen 80;
listen [::]:80;
root /var/www/mysitename.com/html/;
index index.html index.htm index.nginx-debian.html;
server_name mysitename.com www.mysitename.com;
return 301 https://$host$request_uri;
}
server {
listen 443;
server_name mysitename.com www.mysitename.com;
ssl_certificate /etc/letsencrypt/live/mysitename.com/cert.pem;
ssl_certificate_key /etc/letsencrypt/live/mysitename.com/privkey.pem;
ssl on;
ssl_session_cache builtin:1000 shared:SSL:10m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
ssl_prefer_server_ciphers on;
access_log /var/log/nginx/petahr.access.log;
location / {
root /var/www/mysitename.com/html/;
index index.html index.htm index.nginx-debian.html;
}
location /api/ {
proxy_set_header Host $host;
proxy_pass https://127.0.0.1:8084/;
proxy_read_timeout 90;
## try_files $uri $uri/ =404;
}
}
希望有帮助!
推荐阅读
- azure - 将 SSIS 提升并转移到 Azure SQL DB(连接管理器错误)
- windows - Get-ChildItem 尝试扫描网络以查找所有 .mdb 文件时出错
- python - Python:用换行符打印 ujson
- ruby-on-rails - Rails Postgres 查询无法返回新记录
- azure - 逻辑应用 - 从文档中提取的 PartitionKey 与标题中指定的不匹配
- css - 应用“align-self:center”时,Flex 孩子会缩小
- css - Flex box - 如果空间允许,将项目排列在每行多个元素的列中
- machine-learning - 对卷积神经网络中的 2D、3D 卷积的理解感到困惑 3D 或多光谱图像
- amazon-web-services - 根据文件日期从本地 AWS S3 存储桶复制数据
- php - 带有 IONIC 3 和 PHP 的 CORS