如何使用php-fpm配置Nginx?

时间:2017-12-22 19:55:53

标签: php nginx

结论:好的,现在我的配置工作了,我认为问题来自我的项目的位置,在另一个用户的目录中。由于某些原因,nginx或php-fpm对它不满意,似乎不起作用。

仍然困扰我的是它是404错误,而不是403.

好吧,我认为我不会找到最终答案。

我已经阅读了数以万计的方法,不幸的是我不明白会出现什么问题。

server {
    server_name  onepage.cendrounet.com;
    listen       80;
    root /home/pag/workspace/test_css_platform;

    location / {
        fastcgi_pass unix:/var/run/php-fpm/www.sock;
        fastcgi_index index.php;
        include fastcgi.conf;
    }

    error_page 404 /404.html;
        location = /40x.html {
    }

    error_page 500 502 503 504 /50x.html;
        location = /50x.html {
    }
}

Nginx正在运行。

# systemctl status nginx
● nginx.service - The nginx HTTP and reverse proxy server
   Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
   Drop-In: /usr/lib/systemd/system/nginx.service.d
            └─php-fpm.conf
   Active: active (running) since Fri 2017-12-22 09:48:06 CET; 10h ago

Php-fpm正在运行:

# systemctl status php-fpm
● php-fpm.service - The PHP FastCGI Process Manager
   Loaded: loaded (/usr/lib/systemd/system/php-fpm.service; disabled; vendor preset: disabled)
   Active: active (running) since Fri 2017-12-22 09:40:29 CET; 10h ago

Php-fpm确实是一个unix socket

# ls -l /var/run/php-fpm/www.sock
srw-rw----+ 1 root root 0 déc.  22 09:40 /var/run/php-fpm/www.sock

我正在运行fedora,但ausearch -m avc不会产生任何结果。 (如果我不明白selinux是如何工作的,setenforce 0还没有得到任何更好的结果。但是,我仍然把它归还。)

此外,curl -i 'http://onepage.cendrounet.com'返回

HTTP/1.1 404 Not Found
Server: nginx/1.12.1
Date: Fri, 22 Dec 2017 19:11:49 GMT
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
X-Powered-By: PHP/7.1.12

此外,我的用户nginx属于我的论坛pag

我已经设置了我的权限:

# namei -om /home/pag/workspace/css_test_platform/index.php
f: /home/pag/workspace/css_test_platform/index.php
 dr-xr-xr-x root root /
 drwxr-xr-x root root home
 drwxr-x--x pag  pag  pag
 drwxr-xr-x pag  pag  workspace
 drwxrwxr-x pag  pag  css_test_platform
 -rw-rw-r-- pag  pag  index.php

php-fpm的配置是默认配置,选择了一些细节:

user = apache
group = apache
listen = /run/php-fpm/www.sock
listen.acl_users = apache,nginx
listen.allowed_clients = 127.0.0.1

理论上,usergroup应该用于RPM内容,但我仍然将pag组提供给apache

什么可能导致我的索引出现404错误?

2 个答案:

答案 0 :(得分:1)

这是在Arch上,但与systemd相关。

此解决方案适用于开发计算机,出于充分的原因,您不应从/ home文件夹中运行公共站点。

我将php-fpm和nginx配置为以我的用户身份运行。编辑以下文件,然后删除ProtectHome = true行

sudo vi /etc/systemd/system/multi-user.target.wants/php-fpm.service

重新加载,然后重新启动所有内容;

systemctl daemon-reload
systemctl restart nginx.service
systemctl restart php-fpm.service

答案 1 :(得分:0)

您需要在地址栏中添加try_files $uri /index.php;或类似内容:

location / {
    try_files $uri /index.php;
    fastcgi_pass unix:/var/run/php-fpm/www.sock;
    include fastcgi.conf;
}