轻松部署 Laravel 应用 | 《09. 手动部署 - 配置 Nginx 站点》

:clap: 本系列持续更新中,欢迎关注:https://github.com/wi1dcard/laravel-deployment

由于课程上下文关联比较紧密,在开始前请先阅读 本文

你的支持是我写作的动力;关注我的客官们,请在右上角点个赞,将会让文章在首页展示,帮助更多人。

感谢 :clap: !

在先前的小节中,我们已经成功地完成了手动部署中所需要的「安装运行环境」、「部署应用代码」,还差最后临门一脚「配置运行环境」。

Nginx 站点配置

根据 Laravel 5.8 部署文档 的说明,我们可直接拿到一份现成的 Nginx 配置文件,稍作调整即可:

server {
    listen 80;
    server_name laravel-deployment.wi1dcard.cn; # 此为必修改项,请替换为服务器公网 IP 或域名
    root /var/www/deployment/public; # 此为必修改项,请注意指向站点根目录的 public 子目录

    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Content-Type-Options "nosniff";

    index index.html index.htm index.php;

    charset utf-8;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }

    error_page 404 /index.php;

    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php/php7.2-fpm.sock; # 请注意核对 PHP 版本
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~ /\.(?!well-known).* {
        deny all;
    }
}

通常我们仅需修改 server_namerootfastcgi_pass;请注意阅读 # 后的注释。

我们将以上内容保存到本地文件(例如 deployment.conf)内,使用 SCP 即可上传至服务器:

$ scp ~/deployment.conf root@laravel-deployment.wi1dcard.cn:/etc/nginx/sites-enabled/

提示:如果你熟悉 vi 等文本编辑器,也可以直接在服务器上操作,此处不再展开。

其中:

  • ~/deployment.conf 请替换为配置文件的实际保存路径,该路径位于本地。
  • /etc/nginx/sites-enabled/ 为存放 Nginx 站点配置的目录,该目录位于服务器。

重载 Nginx

配置完成后,请务必重启(Restart)或重载(Reload)Nginx。

什么是 重载?实际上,直接重启 Nginx 是不安全的。原因有二:

  • 在 Nginx 进程结束再重新运行的过程中,将造成极短时间的闪断。虽然这一时间通常很短(一般来说在秒级别),但倘若面对大量并发,还是极易造成一部分请求无法访问,即服务中断。
  • 在重启的过程中,若此时 Nginx 恰好正在处理请求,与客户端的 TCP 连接将会断开,客户端无法收到正确响应,造成前后端信息不一致。

在之前的小节中,已经提到重启 Nginx 的方法;

$ service nginx restart

同样地,亦可使用 service 命令重载 Nginx:

$ service nginx reload

另一种等效的方法是:

$ nginx -s reload

最终效果

在浏览器内输入服务器公网 IP 或域名并访问,你将会看到 Laravel 应用的默认主页:

是的,跟之前一毛一样,我也是复制过来的截图 :P

恭喜你,部署成功。

我感谢自己平凡,敢爱敢恨没负担。
我感谢自己不凡,可爱可恨都包揽。

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 9
wanghan

提个小建议,从第一篇开始追到第九篇,感觉后面的章节不是很具体了,nginx的配置项要能稍微展开讲一讲就好啦

1周前

@wanghan 非常感谢建议。为了让大家能够快速地体验到结果,并不断地用成就感驱动学习,所以这里没有详细展开。我将在后续章节中(Ansible、Deployer 阶段)细致讲解各个配置项,以及我们需要进行什么调整、为何需要调整。

1周前

感谢分享 :+1: :+1: :+1:

1周前
wanghan

我来催更了~

5天前
largezhou

最后来一发 Homestead 入魂 :yum:

5天前

@largezhou Homestead 更适合作为开发环境,不适合作为生产环境长期运行。

4天前

@wanghan 哈哈,感谢关注,最近由于租房问题在搬家,所以细碎的事情比较多,下一期如果没问题的话将在明天更新。

4天前
largezhou

@Wi1dcard 我觉得,可以把 MySQL 的安装和配置也弄进系列中去。。这样 lnmp 就搞起来了

4天前

@largezhou 主要是考虑到 MySQL 涉及的知识树比较广而深,如果只讲安装不足以在生产环境使用,讲详细配置又偏离主题太远,所以暂时没有在本系列详细说明 MySQL 的打算,不过这个可以作为下一步的规划。

4天前

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!
未填写
文章
32
粉丝
150
喜欢
440
收藏
264
排名:84
访问:2.35 万+
私信
Ta 的博客首页