分类
Laravel

Laravel Homestead中Nginx站点的配置分析

Homestead虚拟机为Laravel框架下的PHP Web app开发提供了一个统一的环境,无论是在Windows,Linux还是MacOS中开发,你都会得到相同的输出结果,完美的解决了“我这里能跑,为什么你那里不行呢”的问题。那么,在生产环境中如何部署Laravel项目,尤其是Web Server如何配置,相信Homestead虚拟机中的Nginx站点配置,会给我们最佳的答案。以下我会分析一个典型的Laravel站点的配置项,以此窥探Nginx作为Web Server的经典用法。

在Linux上如果使用各种包管理器安装的Nginx,那么配置文件会出现在 /etc/nginx下。nginx.conf是全局的配置文件,

user vagrant; #指定nginx的用户,建议为web server创建专门的用户,而不要使用root用户

worker_processes auto; #worker_processes默认情况下为1,一般情况下不用修改,但考虑到实际情况,可以修改这个数值,以提高性能; 设置为auto,让系统自动选择

pid /run/nginx.pid; #指定nginx pid的位置,一般不需要修改

include /etc/nginx/modules-enabled/*.conf; #指定nginx各个模块配置文件存放的位置,*号是文件通配符,代表所有的conf文件

events {
worker_connections 768; #最大连接数,网站用户多的情况下需要调大
# multi_accept on;
}

http 大括号中的就是Web server的一些基本配置了:

sendfile on; # sendfile实际上是 Linux2.0+以后的推出的一个系统调用,web服务器可以通过调整自身的配置来决定是否利用 sendfile这个系统调用,设为on可以提供系统性能。同时要设置tcp_nopush和tcp_nodelay为on

keepalive_timeout 65; # Nginx 使用 keepalive_timeout 来指定 KeepAlive 的超时时间(timeout)。指定每个 TCP 连接最多可以保持多长时间。

types_hash_max_size 2048; # 影响散列表的冲突率。types_hash_max_size越大,就会消耗更多的内存,但散列key的冲突率会降低,检索速度就更快。types_hash_max_size越小,消耗的内存就越小,但散列key的冲突率可能上升。一般使用默认的就好

client_max_body_size 1024m; # 这一项就是设置http请求body的最大容量了,修改最大允许上传文件的大小,除了在php.ini配置,千万不要忘了在nginx中同步修改这个参数

include /etc/nginx/mime.types; # 引入mime表,用来识别各种文件类型

default_type application/octet-stream; # 设置默认的文件mime类型

ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # 这里配置SSL支持的TLS协议版本,需要安装OpenSSL相应版本的支持,目前主流的版本是TLS1.2,比如开发微信小程序后台就需要支持这个版本

ssl_prefer_server_ciphers on; #

access_log /var/log/nginx/access.log; # 指定访问日志文件存储的位置

error_log /var/log/nginx/error.log; # 指定访问错误日志存储的位置

gzip on; # 启动gzip压缩传输的内容

include /etc/nginx/conf.d/*.conf; 和include /etc/nginx/sites-enabled/*; # 指定具体站点配置文件的位置

接下来进入单个Web站点的具体配置文件,一般把配置文件保存在sites-available目录下,然后需要启用的网站创建软连接到sites-enabled目录下。

erver {
    listen 80; # 配置http协议监听的端口
    listen 443 ssl http2; # 配置https协议监听的端口
    server_name .kttcrm.local; # 配置站点的域名,nginx就是通过这一项匹配请求进入的Web应用
    root "/home/vagrant/code/kttCRM/public"; # 指定站点的路径

    index index.html index.htm index.php; # 指定请求默认的入口文件,按照从左到右的顺序依次匹配

    charset utf-8; # 指定Web应用所用的字符集



    location / {
        try_files $uri $uri/ /index.php?$query_string; # 找指定路径下文件,如果不存在,则转给哪个文件执行

    }
    location = /favicon.ico { access_log off; log_not_found off; } # favicon.ico 文件是浏览器收藏网址时显示的图标,当客户端使用浏览器问页面时,浏览器会自己主动发起请求获取页面的 favicon.ico 文件,但是当浏览器请求的 favicon.ico 文件不存在时,服务器会记录404日志,而且浏览器也会显示404报错,设置为off则不会显示404错误
    location = /robots.txt  { access_log off; log_not_found off; } # 同理针对robots.txt文件:搜索引擎通过一种程序robot(又称spider),自动访问互联网上的网页并获取网页信 息。您可以在您的网站中创建一个纯文本文件robots.txt,在这个文件中声明该网站中不想被robot 访问的部分,这样,该网站的部分或全部内容就可以不被搜索引擎收录了,或者指定搜索引擎只收录指定的内容。
    access_log off; # 关闭记录访问日志
    error_log  /var/log/nginx/kttcrm.local-error.log error; # 指定错误日志保存的位置,及记录的错误等级

    sendfile off;

# 以下是php进程管理器的配置
    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$; # 匹配php文件名解析
        fastcgi_pass unix:/var/run/php/php7.2-fpm.sock; # 指定php进程管理器的版本,前提是已经安装好指定版本的管理器
        fastcgi_index index.php; # php进程管理器入口文件
        include fastcgi_params; # 包含的参数
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; # PHP脚本文件请求的路径


        fastcgi_intercept_errors off; # 指定是否传递4XX和5XX错误信息到客户端
        fastcgi_buffer_size 16k; # 配置缓存区大小
        fastcgi_buffers 4 16k; # 最多使用4个16K的缓存区
        fastcgi_connect_timeout 300; # 连接超时的时间
        fastcgi_send_timeout 300; # 请求发送的超时时间
        fastcgi_read_timeout 300; # 读取的超时时间
    }

    location ~ /\.ht {
        deny all; # 防止处理所有.ht文件,防止与Apache Server的冲突
    }

    ssl_certificate     /etc/nginx/ssl/kttcrm.local.crt; # 指定ssl证书的位置
    ssl_certificate_key /etc/nginx/ssl/kttcrm.local.key; # 指定ssl密钥的位置
}

以上就是针对Homestead虚拟机中Laravel 站点Nginx配置的一些说明,希望对你有一些帮助。