Loading... <!--more--> ### 首先介绍环境: 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的部分 ```# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 #//这里说通过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; } ``` 修改完配置文件过后重启<code>nginx</code>&<code>php7.0-fpm</code>即可。 上面的那个替换的缘由:[https://www.2cto.com/kf/201612/580693.html](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的连接形式设置的问题,我设置的是数字型,突然发现无法进入各个页面,后来换回朴素型,就是默认的就好了。 Last modification:October 12, 2020 © Allow specification reprint Like 0 If you think my article is useful to you, please feel free to appreciate