如何在 NGinx 上设置 FSyncMS?

如何在 NGinx 上设置 FSyncMS?

我正在尝试在服务器上设置 FSyncMS(php 中的最小 php weave/sync1.1 服务器)。我已经设置了后端,但遇到一个问题,我无法找到让 nginx(我的前端 Web 服务器)正确将请求传递给 php 脚本的方法。

同步客户端使用斜线参数 URL 将参数传递给服务器:

scheme://server.com/user/1.0/a

应翻译为:

scheme://server.com/index.php/user/1.0/a

然后将后面的所有内容作为带有参数的 index.php 传递给后端。不幸的是,nginx 很乐意将 index.php/user/1.0/a 视为路径,而不是将 index.php 视为路径并将 /user/1.0/a 视为参数。结果:可预测的 404...

有关同步服务器实现的更多信息(不幸的是是德语):http://www.ohnekontur.de/2011/07/24/how-to-install-fsyncms-firefox-sync-eigener-server/

我该如何解决这个问题?

编辑:nginx 配置:

server {
    listen 80;
    server_name sync.server.com;
    return 301 https://$server_name$request_uri;  # enforce https
}

server {
    listen 443 ssl;
    server_name sync.server.com;

    ssl_certificate /srv/syncserver/server.com.combined.crt;
    ssl_certificate_key /srv/syncserver/server.com.key;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers !aNULL:!LOW:!MD5:!EXP:CAMELLIA:AES256:HIGH:AES128:RC4:!3DES:!SEED;
    ssl_prefer_server_ciphers on;

    access_log /srv/www/sync/logs/access.log;
    error_log /srv/www/sync/logs/error.log;

    root /srv/www/sync/public_html;
    index index.php index.html;

    location / {
        ssi on;
        index index.php index.shtml index.html index.htm;
    }

    location ~ \.php$ {
        include /etc/nginx/fastcgi_params;
        fastcgi_pass  127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}

答案1

try_files当不存在匹配的静态资产时,您无法将请求转移到 PHP。

例如:

location / {
    try_files $uri $uri/ /index.php;

答案2

在这里发布我自己的答案以供将来参考。在从同事那里获得有关 try_files 的更多帮助并更详细地检查脚本后,问题有两个方面:

1) fsyncms 不喜欢位于主机的根目录中。它会通过删除尾随斜杠来清理路径,但如果是 /,则会留下一个空路径字符串,从而引发错误。

2)需要try_files(感谢Michael的指点!)但实际需要的规则与传递参数略有不同(例如,将fsync脚本放在服务器上的/fsync中时):

try_files $uri $uri/ /fsync/index.php/$args;

此后,客户端接受服务器 URI http(s)://server.com/fsync/。

相关内容