PHP 自定义文件处理程序的 Nginx 配置

PHP 自定义文件处理程序的 Nginx 配置

我是 nginx 新手,正在边学边用。我正在尝试一个博客网站,配置如下。当我访问我的网站时http://example.org/markdown-example.md,它会在页面上加载 md 文件的内容,而不是将其传递给 md.php。

有人能告诉我我可能做错了什么吗?谢谢!

file: /etc/nginx/sites-available/blog

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
location ~ \.php$ {
    try_files $uri  =404;
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini

    # With php5-cgi alone:
    # fastcgi_pass 127.0.0.1:9000;
    # With php5-fpm:
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_index index.php;
    include fastcgi_params;
}


location ~ \.md$ {
    try_files $uri =404;
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_param DOCUMENT_ROOT $document_root;
    fastcgi_param SCRIPT_NAME $uri;
    fastcgi_param SCRIPT_FILENAME /usr/share/nginx/blog/md.php;
    include fastcgi_params;
}

location ~ ^(.*)\.md/raw$ {
    try_files $1.md =404;
}

我还添加 .md 作为允许的文件扩展名之一:

file: /etc/php5/fpm/pool.d/www.conf
security.limit_extensions = .md .php .php3 .php4 .php5

另外当我去http://example.org/markdown-example.md/raw,由于某种原因,.md 文件被下载。

答案1

做你想做的事情的更合适的方法是让你location ~ \.md$像这样阻止:

location ~ \.md$ {
    rewrite ^ /blog/md.php last;
}

在这里我假设你的root指令被指定为/usr/share/nginx/,这样就会rewrite解析为/usr/share/nginx/blog/md.php

因此,此重写会将请求重定向到以.mdmd.php 结尾的任何路径。重写后,nginx 将执行另一轮匹配,并找到该location ~ \.php$块,然后使用它来将脚本执行传递给 PHP 引擎。

相关内容