使用 nginx 在同一台服务器上托管静态网站和 api 服务
Host static website and api service on same server using nginx
我想使用 nginx.
从同一台机器上为我的 static website
和 API 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",那么您可以访问这个 API http:///localhost/api/版本。
这里我写一个conf
可以执行你需要的操作:
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-Range,Authorization,Content-Type,x-json-response';
add_header 'Access-Control-Allow-Credentials' 'true' always;
}
}
我想使用 nginx.
从同一台机器上为我的static website
和 API service
提供服务
网站存在于 /var/www/html
API 服务在端口 8000
http://localhost
应该打开静态网站
http://localhost/api
应该代理端口 8000
在 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",那么您可以访问这个 API http:///localhost/api/版本。
这里我写一个conf
可以执行你需要的操作:
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-Range,Authorization,Content-Type,x-json-response';
add_header 'Access-Control-Allow-Credentials' 'true' always;
}
}