首先介绍环境:

Ubuntu 16.04(阿里云)
PHP 7.0.22-0ubuntu0.16.04.1 (cli)
nginx version: nginx/1.10.3 (Ubuntu)
PHP7.0-fpm

最开始的时候不知道为什么就选了LAMP+wordpress搭建博客,反正就是好了之后后悔的不行,准备着手换成:LNMP+typecho。

下面就开始第一步了,首先先更换web服务:apache——————nginx 首先就是安装:

# apt-get install nginx php7.0-fpm

这里说下php7.0-fpm是nginx处理PHP的关键 因为之前我没有停掉Apache,他会提示已经安装但是不能启动,然后吧啦吧啦说一大堆。

# service apache2 stop   
# service nginx start

接下来就是修改nginx的配置文件了,目录/etc/nginx/sites-available这里面有个default,这就是配置文件, 建议备份后继续修改,因为这面的东西也有有用的。 下面我截取片段配置文件说下,全部的配置文件在最后会贴上来

server {
listen 80 default_server;//这里就是监听端口的设置,也可以改成8080之类的
listen [::]:80 default_server;

root /var/www/html;//这里是网站的根目录,他默认的也是这个我一直没动,之前的apache也是这里

# Add index.php to the list if you are using PHP
index index.php index.html index.htm index.nginx-debian.html;//这里本来是没有index.php上面也说了如果你使用PHP请添加

server_name blog.yelvlab.cn;//这里是域名,也可以直接_就行

这是基础的部分,下面介绍下其他部分:有关PHP的部分

#//这里说通过FastCGI来处理PHP请求之类的,下面就是添加
location ~* \.php$ {
    fastcgi_index     index.php; 
    #fastcgi_pass     127.0.0.1:9000;
    //这部分是我在PHP官网找到的配置nginx的代码,但是发现还是不行,
    后来经过在网上查找,发现设置里出现了问题,
    把127.0.0.1:9000替换成unix:/run/php/php7.0-fpm.sock就好了,
    具体为什么下面说
    反正这里就是官网提供的配置,和不对的地方
    fastcgi_pass      unix:/run/php/php7.0-fpm.sock; 
    include           fastcgi_params; 
    fastcgi_param     SCRIPT_FILENAME    $document_root$fastcgi_script_name;
    fastcgi_param     SCRIPT_NAME        $fastcgi_script_name;
}

修改完配置文件过后重启nginx&php7.0-fpm即可。
上面的那个替换的缘由:https://www.2cto.com/kf/201612/580693.html,这里是原文,下面我稍作整理。

Nginx处理请求是通过fpm 管理fastcgi来实现请求和相应, 而Nginx和php-fpm可以通过监听9000端口(default)或者socket来实现。 0.0.1:9000走网络,通过Nginx的conf文件,把php结尾的都交给9000端口处理,php-fpm(fastcgi的进程管理器)选择并且连接到一个fastcgi子进程,并将环境变量和标准输入发送到fastcgi子进程,然后不断处理请求响应。

cd /etc/php/7.0/fpm  
sudo vim php-fpm.conf
打开php7.0-fpm的配置文件,在最后面发现一个include,那么我们去看下这个
include=/etc/php/7.0/fpm/pool.d/*.conf
按照上面的线索继续找
cd /etc/php/7.0/fpm/pool.d
ll之后发现只有一个www.conf
sudo vim www.conf
找了一下发现在开头的不远处发现:
; The address on which to accept FastCGI requests.
; Valid syntaxes are:
;   'ip.add.re.ss:port'    - to listen on a TCP socket to a specific IPv4 address on
;                            a specific port;
;   '[ip:6:addr:ess]:port' - to listen on a TCP socket to a specific IPv6 address on
;                            a specific port;
;   'port'                 - to listen on a TCP socket to all addresses
;                            (IPv6 and IPv4-mapped) on a specific port;
;   '/path/to/unix/socket' - to listen on a unix socket.
; Note: This value is mandatory.
listen = /run/php/php7.0-fpm.sock
注意看最下边,关于php request的请求要在/run/php/php7.0-fpm.sock这里。所以上面那里修改为这个。
最后插一句,这段的上面有一个关于用户和组的,顺带看一眼
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
; will be used.
user = www-data
group = www-data
这样就没问题

然后就可以在网站目录/var/www/html/下新建一个PHP测试页面phpinfo.php名字无所谓重要的是内容

<?php
    echo phpinfo();
?>

然后在浏览器访问你的Ip地址/phpinfo.php,就会看见php的信息了。这样就证明你的网站可以打开PHP了。

等等,再补充一点东西关于配置nginx的配置文件时候重启nginx报错

Job for nginx.service failed because the control process exited with error code. See "systemctl status nginx.service" and "journalctl -xe" for details.

这个是你的语法问题,回头再看下配置文件,是不是少个{}或者;什么的.   然后配置文件目前就这两部分,还有个rewrite需要弄,还没怎么弄明白,懂了怎么搞还要加上去,下面我就把我目前的配置文件都贴上来:

server {
    listen 80 default_server;
    listen [::]:80 default_server;


    root /var/www/html;

    # Add index.php to the list if you are using PHP
    index index.php index.html index.htm index.nginx-debian.html;

    server_name blog.yelvlab.cn;

    #rewrite config
    if (!-e $request_filename) {
        rewrite ^(.*)$ /index.php$1 last;
    }
    
    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    location ~* \.php$ {
    fastcgi_index     index.php; 
    fastcgi_pass      unix:/run/php/php7.0-fpm.sock; 
    include           fastcgi_params; 
    }


}

最后在说一个问题,wordpress的连接形式设置的问题,我设置的是数字型,突然发现无法进入各个页面,后来换回朴素型,就是默认的就好了。

最后修改:2020 年 10 月 12 日
如果觉得我的文章对你有用,请随意赞赏