无法使用SPA和API配置基本Nginx服务器

ttcibm8c  于 2023-08-03  发布在  Nginx
关注(0)|答案(1)|浏览(118)

我是Nginx的新手,我正在尝试基本的场景:为我的angular SPA提供服务,并公开在端口8000上的同一服务器上运行的API。下面是/etc/nginx/nginx.conf文件中的一个片段

server {
    listen 80;
    location / {
        root /var/www/html;
        try_files $uri $uri/ /index.html;
        index index.html;
    }
    location /api/ {
        proxy_pass http://localhost:8000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        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_cache_bypass $http_upgrade;
    }
    error_log /var/log/nginx/error.log debug;
}

字符串
有了这个配置,我可以在http://{my-ip}上看到我的angular应用程序,但试图访问http://{my-ip}/api/{my-resourse-name}上的API总是导致Nginx 404。
我通过发出一个curl请求来确保我的API在服务器上运行正常。而且我的防火墙被禁用(以便端口80可用)。还尝试从location /api/中删除尾随的/
我是否需要尝试以下操作?

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


有点不愿意在不知情的情况下做随机的事情。看起来好像请求根本没有传递到localhost:8000。如果你能帮忙的话,我将不胜感激。

7uzetpgm

7uzetpgm1#

你可以尝试以下方法:

server {
    listen 80;
    location / {
        root /var/www/html;
        try_files $uri $uri/ /index.html;
        index index.html;
    }
    location ~* ^/api/(.*)$ {
      proxy_pass http://localhost:8000/$1$is_args$args;
      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-Host $server_name;
      proxy_set_header   X-Forwarded-Proto $scheme;
    }
    error_log /var/log/nginx/error.log debug;
}

字符串
这个API已经在localhost:8000上运行了,你可以在那里访问它吗?

相关问题