ubuntu - nginx 不匹配位置(我认为)

标签 ubuntu parse-platform nginx digital-ocean parse-server

我正在根据此文档将解析服务器迁移到 DigitalOcean Ubuntu 液滴:

https://www.digitalocean.com/community/tutorials/how-to-migrate-a-parse-app-to-parse-server-on-ubuntu-14-04

我对解析服务器的 nginx 代理 (https) 请求有问题。

如果我在我的 droplet 上打开端口 1337 并将 Parse http 请求配置为直接转到 parse-server ( http://example.com:1337/parse ),这一切都按预期工作。

如果我将 Parse http 请求配置为转到 https://example.com/parse , nginx 无法将请求代理到 parse-server。

nginx 返回一个 404(这可能是/位置的作用)。

Let's Encrypt SSL 证书似乎按预期工作,因为我可以提供静态内容(http 请求通过 301 状态从 80 重定向到 443)。

我的 nginx 默认配置如下所示:

# HTTP - redirect all requests to HTTPS
server {
    listen 80;
    listen [::]:80 default_server ipv6only=on;
    return 301 https://$host$request_uri;
}

# HTTPS - serve HTML from /usr/share/nginx/html, proxy requests to /parse/
# through to Parse Server
server {
    listen 443;
    server_name example.com;

    root /usr/share/nginx/html;
    index index.html index.htm;

    ssl on;
    # Use certificate and key provided by Let's Encrypt:
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';

    # Pass requests for /parse/ to Parse Server instance at localhost:1337
    location /parse/ {
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-NginX-Proxy true;
            proxy_pass http://localhost:1337/;
            proxy_ssl_session_reuse off;
            proxy_set_header Host $http_host;
            proxy_redirect off;
    }

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

这是 nginx access.log 中的典型行:
xxx.xxx.xxx.xxx - - [20/Mar/2016:18:54:53 -0400] "PUT /parse/classes/_User/xxxxxxxxxx HTTP/1.1" 404 68 "-" ...

有什么方法可以打开更详细的调试,以便我知道匹配失败的原因吗?

谢谢,
彼得

解决方案(见下文)
注意在 proxy_pass 配置中添加/parse/
  location /parse/ {
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-NginX-Proxy true;
            proxy_pass http://localhost:1337/parse/;
            proxy_ssl_session_reuse off;
            proxy_set_header Host $http_host;
            proxy_redirect off;
    }

最佳答案

您的配置不代理 https://example.com/parse , 它代理 https://example.com/parse/ .前一个 URI 由 location / 处理。堵塞。

此外,URI https://example.com/parse/向上游发送到 http://example.com:1337/而不是 http://example.com:1337/parse .

如果您需要透明地代理 URI,不带尾随 / , 利用:

location /parse {
    proxy_pass http://localhost:1337;
    ...
}

请注意,两个尾随 / s 已被删除。见 this document详情。

关于ubuntu - nginx 不匹配位置(我认为),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36120467/

相关文章:

linux - 如何使用终端备份文件?

arrays - 在另一个用户中插入 ObjectId - Parse 和 Swift

javascript - 如何删除 parse.com 中的特定行?

caching - Nginx memcache 缓存和失效

linux - nginx 服务器中未加载 magento 的设计文件

linux - 读取和写入 cron 脚本使用的数据的好地方?

ubuntu - 如何让我的 Stardog 服务在 azure ubuntu VM 中自动启动?

parse-platform - Parse Server - 用于配置新 Parse 实例的架构 API

redirect - Varnish + Nginx重定向问题(重定向到:8080)

java - JApplet 不接收鼠标事件