在reactjs应用程序中使用nginx配置php

时间:2018-04-06 19:53:10

标签: php nginx ubuntu-16.04 digital-ocean

我有一个反应应用程序的nginx配置。然而,我还想包含一个我用php动态构建的sitemap.php。

所以这是我的nginx配置:

server {
    listen 80;
    listen [::]:80;
    server_name mysite.com;

    index index.html index.htm;


    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
    }


    location /sitemap.xml {
        alias /var/www/web-app/public/sitemap.php;
    }


    location / {
        root /var/www/web-app/public;
        try_files $uri $uri/ /index.html;
        default_type "text/html";
    }

}

代码段文件由以下内容组成:

# regex to split $uri to $fastcgi_script_name and $fastcgi_path
fastcgi_split_path_info ^(.+\.php)(/.+)$;

# Check that the PHP script exists before passing it
try_files $fastcgi_script_name =404;

# Bypass the fact that try_files resets $fastcgi_path_info
# see: http://trac.nginx.org/nginx/ticket/321
set $path_info $fastcgi_path_info;
fastcgi_param PATH_INFO $path_info;

fastcgi_index index.php;
include fastcgi.conf;

此外,它托管在Ubuntu 16.04 digitalocean VPS上。

我的反应应用程序仍然正常加载。它基于我的站点根目录中的index.html(/ var / www / web-app / public)。如果我将test.php放在公用文件夹中,我会收到404错误。对于我的sitemap.xml别名,它正确转发到sitemap.php(也在公共场合),但php不会呈现。

所以我的两个最大问题在这里: 1.为什么我在/mysite.com/test.php上获得404? 2.为什么我的php在它工作时不能渲染? (即sitemap.php)

1 个答案:

答案 0 :(得分:1)

您缺少root块的location ~ \.php$语句,因此找不到您的PHP文件。由于这似乎是带root块的常见location /,只需将语句移至server块范围:

root /var/www/web-app/public;

location ~ \.php$ {
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
}

location / {
    try_files $uri $uri/ /index.html;
    default_type "text/html";
}

有多种方法可以将/sitemap.xml重定向到/sitemap.php,但rewrite...last对用户来说最简单且不可见:

location = /sitemap.xml {
    rewrite ^ /sitemap.php last;
}

location语法见this documentrewrite指令见this one