Nginx 配置基础,详细说明
开始之前,你需要已经知道如何安装启动 nginx,并知道它的配置目录是在:
Mac 配置文件目录: /usr/local/etc/nginx
一、基础配置
官方文档 (En):http://nginx.org/en/docs/beginners_guide.html
1. 原理
Nginx 配置文件里面可以有多个 server
代表多个站点,比如通过端口配置的多个站点、通过域名配置的多个站点。
注意: 每一个单条的配置后面都需要加冒号 ;
http {
server {
}
}
server 中可以有多个路径,每个路径都不一定是在实际的物理目录下,目录是你写的,然后再根据自己需要对应到不同的物理目录下。
比如下面这个配置,如果网站域名是 localhost
:
-
localhost
对应的是/data/www
这个实际的物理目录, -
localhost/images
对应的就是/data
这个实际的目录
server {
location / {
root /data/www;
}
location /images/ {
root /data;
}
}
当请求经过 nginx
时,先确定是走哪个 server
再确定是走的哪个 location
, nginx
配置文件扮演的就是个路由表的角色,附加一些权限配置。
2. 代理站点
再看个例子:
第一个
- server1 监听
8080
端口 - server1 根目录是
/data/up1
- server2 把 server1 作为自己的一个子配置,在访问
/
目录时,就会访问第一个配置的目录。 - server2 的第二个配置目录,使用的是正则表达式,需要在表达式之前使用
~
这个符号
server {
listen 8080;
root /data/up1;
location / {
}
}
server {
location / {
proxy_pass http://localhost:8080;
}
location ~ \.(gif|jpg|png)$ {
root /data/images;
}
}
二、 多站点配置
原理:
这里先讲讲简单的两个原理,多站点配置主要是通过: 端口号、域名。
apache
或 nginx
的多站点配置原理都是一样的。
1. 通过端口号
如 localhost:80
localhost 8080
localhost:8081
都可以配置不同的站点,一个端口号对应一个站点,一个站点对应一个独立的目录,如下:
server {
listen 80;
server_name localhost;
location / {
root /Users/Kyle/Documents/website;
index index.html index.htm;
}
}
server {
listen 8080;
server_name localhost;
location / {
root /Users/Kyle/Documents/website/diary;
index index.html index.htm;
}
}
server {
listen 8081;
server_name localhost;
location / {
root /Users/Kyle/Documents/website/diary-vue;
index index.html index.htm;
}
}
2. 通过域名
域名配置多站点的原理是: 多个域名可以指向同一个 ip 地址,也就是同一个主机。
此时就用 server_name
来区分,不同的请求进入 nginx 之后,匹配不同的 server_name
也就是域名,然后调用不同的 server
配置,访问不同的目录。
配置域名指向 127.0.0.1 (也就是我自己电脑)
127.0.0.1
和 diary.kylebing.cn
都会指向我的电脑,
- 由
127.0.0.1
访问的时候会调用下面配置中的第一个server
- 用
diary.kylebing.cn
访问的时候会调用下面配置中的第二个server
server {
listen 80;
server_name 127.0.0.1;
location / {
root /Users/Kyle/Documents/website;
index index.html index.htm;
}
}
server {
listen 8080;
server_name diary.kylebing.cn diary.kylebing.net;
# 可以使用多个域名,中间用空格间隔
location / {
root /Users/Kyle/Documents/website/diary;
index index.html index.htm;
}
}
效果:
三、配置 php
这里我使用的是系统自带的 php, php -version
可以查看 php 版本信息
PHP 7.3.11 (cli) (built: Jun 5 2020 23:50:40) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.11, Copyright (c) 1998-2018 Zend Technologies
1. 修改配置文件
在mac中,下面两个路径是一样的,因为 /usr/local/etc
= /etc
/usr/local/etc/nginx/nginx.conf
/etc/nginx/nginx.conf
修改配置文件:
- 在
server
外层添加 root 这项写成你的项目目录,写在 http
层也可以,写在 server
层也可以 - 将
server
内部的 root 删除,并将:
fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
改为
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
如下,作为参考
http {
include mime.types;
default_type application/octet-stream;
# root 写在这一层也可以,写在里面也可以,但不要写在 location 内部
root /Users/Kyle/Documents/website;
server {
listen 80;
server_name localhost;
location / {
index index.php index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
}
2. 设置 php-fpm 的配置文件
nginx.conf
中的 127.0.0.1:9000
的代理就是 php-fpm
提供的。
我们需要将其启动,在启动之前需要把它需要的配置文件都配置好。
切换到 /etc
目录
Kyle@Kyles-MBP log % cd /etc
查看一下里面存在的关于 php 的文件,如下
Kyle@Kyles-MBP /etc % ll | grep php
-rw-r--r-- 1 root wheel 5331 Aug 25 2019 php-fpm.conf.default
drwxr-xr-x 4 root wheel 128 Oct 6 10:49 php-fpm.d
-r--r--r-- 1 root wheel 71890 Dec 14 2019 php.ini.default
-r--r--r-- 1 root wheel 71055 Mar 31 2018 php.ini.default-previous
php-fpm.d 目录中还有一个关于配置的文件
Kyle@Kyles-MBP /etc % ll php-fpm.d
total 56
-rw-r--r-- 1 root wheel 19604 Dec 14 2019 www.conf.default
.default 文件都是系统预置的一些配置参考文件,我们只需要复制一份即可
这里需要根据其提供的原配置文件,复制出三个配置文件:
-
php-fpm.conf
fpm 的配置文件
cp php-fpm.conf.default php-fpm.conf
-
php.ini
php 配置文件
cp php.ini.default php.ini
-
www.conf
cp php-fpm.d/www.conf.default php-fpm.d/www.conf
错误处理
把配置文件整好之后,启动 php-fpm
失败,错误如下,请查看此处: nginx php-fpm 错误处理: ERROR: failed to open error_log (/usr/var/log/php-fpm.log): No such file or directory
Kyle@Kyles-MBP nginx % php-fpm
[06-Oct-2020 10:14:08] ERROR: failed to open error_log (/usr/var/log/php-fpm.log): No such file or directory (2)
[06-Oct-2020 10:14:08] ERROR: failed to post process the configuration
[06-Oct-2020 10:14:08] ERROR: FPM initialization failed
四、 能够正常访问了