主持人权静网站和API服务使用nginx的同一台服务器上

问题描述

我想使用 nginx 在同一台机器上为我的 static websiteAPI service 提供服务。

网站位于/var/www/html
API 服务在端口 8000

上运行

http://localhost 应该打开静态网站
http://localhost/api 应该代理在端口 8000

上运行的 api 服务

http://nginx.org/en/docs/beginners_guide.html 的帮助下,我尝试了这个配置

server {
        listen 80 default_server;
        listen [::]:80 default_server;

        root /var/www/html;

        index index.html index.htm index.Nginx-debian.html;

        server_name _;

        location / {
                try_files $uri $uri/ =404;
        }

        location /api {
                proxy_pass http://localhost:8000;
        }
}

http://localhost 工作正常,但 http://localhost/api 给我错误 404

实现这样的基础设施应该进行哪些正确的配置?

解决方法

您的 nginx 反向代理会将所有包含(或开始,我不确定)“/api”的请求传递给您的 API 服务。

当您将请求发送到 http://localhost/api 时,代码中的路由“/api”被调用。我猜这条路线不存在,因为你有 404。

要访问您的 API,一种简单的解决方案是在您的所有 API 前加上“/api”。

例如,如果你定义了API GET "/version",它应该变成"/api/version",那么你就可以通过http://localhost/api/version 访问这个API。

,

这里我正在编写一个配置文件,可以根据您的喜好执行此类操作

server {
  listen 80;
  server_name <server_name_you_prefers>;

  location / {
    alias /var/www/html/; # Static directory's complete path from root
  }

  location /api {
    proxy_pass http://127.0.0.1:8000;
    proxy_set_header Host $host;
    proxy_pass_request_headers on;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    add_header 'Access-Control-Allow-Origin' '*' always;
    add_header 'Access-Control-Allow-Methods' 'GET,PUT,PATCH,POST,DELETE,OPTIONS,HEAD';
    add_header 'Access-Control-Expose-Headers' 'Origin,Content-Length,Content-Range,Authorization,Content-Type';
    add_header 'Access-Control-Allow-Headers' 'Content-Length,Content-Type,x-json-response';
    add_header 'Access-Control-Allow-Credentials' 'true' always;
  }
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...