注意:本文系统环境Ubuntu 16.04 LTS
,已安装php7.2
。我的Laravel
项目文件位置/var/www/myproject
。
在阅读文章步骤之前,如果你目前正在运行Apache
的话,请输入
$ sudo systemctl stop apache2
来停止Apache
的运行。
NGINX
:
$ sudo apt-get update
$ sudo apt-get install nginx
完成之后,我们配置一下防火墙:
$ sudo ufw app list
Available applications:
Nginx Full
Nginx HTTP
Nginx HTTPS
OpenSSH
可以看到,有三个应用可以选择,我们这里使用Nginx Full
(当然,如果不使用SSL
你也完全可以选择HTTP
):
$ ufw allow "Nginx Full"
由于Nginx
不能原生处理PHP
,我们需要安装php-fpm
。我安装的php
版本为7.2
,所以我这里选择安装php7.2-fpm
:
$ sudo apt-get install php7.2-fpm
请根据你服务器php
的版本号来选择相应fpm
。安装完成后,我们需要对php
进行一个安全配置:
$ sudo vim /etc/php/7.2/fpm/php.ini
找到
# cgi.fix_pathinfo=1
将#
去掉,并将1
改为0
:
cgi.fix_pathinfo=0
保存退出。接下来重启php-fpm
:
$ sudo systemctl restart php7.2-fpm
php
配置完成,
nginx
安装完成,我们需要配置
vhost
,即
nginx
中的
server block
。
这里有个概念先讲解一下,类似Apache
的配置,Nginx
配置中也存在sites-available
这个文件夹,不过与Apache
略有不同的是,Nginx
配置完vhost
后,使用symbolic link
将配置文件链接至sites-enabled
文件夹,这个过程与我们在Apache
中使用a2ensite
命令将我们的站点激活非常类似。
那么我们首先打开Nginx
配置:
$ cd /etc/nginx/sites-available
$ cp default mysite.com
可以看到,我们将sites-available
文件夹下的default
配置文件拷贝后,生成了我们需要修改的名为mysite.com
的配置文件。打开这个文件:
$ vim mysite.com
可以看到,里面有一段这样的配置:
# Virtual Host configuration for example.com
#
# You can move that to a different file under sites-available/ and symlink that
# to sites-enabled/ to enable it.
#
#server {
# listen 80;
# listen [::]:80;
#
# server_name example.com;
#
# root /var/www/example.com;
# index index.html;
#
# location / {
# try_files $uri $uri/ =404;
# }
#}
我们将除了以上配置的其余配置全部删除,然后将以上配置反注释。接下来,我们需要修改其中的配置。
我在文章头部已经说过,我的Laravel
项目文件在/var/www/myproject
中,我们假设我们将要使用mysite.com
这个域名作为我们网站地址。那么我们将以上配置做出修改如下:
server {
listen 80;
listen [::]:80;
root /var/www/myproject/public;
index index.php;
server_name mysite.com www.mysite.com;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.2-fpm.sock;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
location ~ /\.ht {
deny all;
}
}
可以看到,我们在server_name
中加上了mysite.com
及www.mysite.com
这个alias
,所以两者都可以用来访问我们的项目。
index
后面我们添加了index.php
,因为我们需要php
来动态加载页面。
接下来我们看到
location / {
try_files $uri $uri/ /index.php?$query_string;
}
这段location
配置非常重要,注意我们在try_files
的最后,添加了/index.php?$query_string
。这一步非常重要,因为为了使Laravel
正常工作,所有的请求都应该被传递给Laravel
本身,即所有的请求都被传递给了index.php
,Laravel
的应用主文件。如果这一步没有配置,那么我们只能够打开项目主页,其余页面将无法跳转。
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.2-fpm.sock;
}
这一段中我们设置好php-fpm
的相关配置。然后保存退出。
接下来我们输入
$ sudo ln -s /etc/nginx/sites-available/mysite.com /etc/nginx/sites-enabled/
以激活我们的网站。注意:这里一定要使用绝对路径,而不能使用相对路径(例如../sites-available
),切记。
完成后,我们重启Nginx
:
$ sudo systemctl restart nginx
好了,这样一来,mysite.com
就成功地被指向我们的项目地址,并且nginx
可以正常处理请求加载出页面了。