概念
- 了解 Nginx 的基本概念
安装
1 | apt-get install nginx # Ubuntu |
配置文件
1 | nginx -t # 检查配置文件正确性 test configuration and exit |
主要文件位置
which nginx # or whereis nginx
:查看主程序文件/etc/init.d/
:下创建了启动脚本nginx(需手动配置),支持service nginx start
命令/var/log/nginx
:日志文件夹,/var/log/nginx/error.log
:错误日志文件,/var/log/nginx/access.log
:访问日志文件/etc/nginx/nginx.conf
:Nginx全局站点配置文件,日志文件可以在/etc/nginx/nginx.conf
中配置,默认读取的配置文件/etc/nginx/conf.d
:自定义Nginx站点配置文件存放目录/etc/nginx/conf.d/default.conf
:网站默认站点配置/usr/share/nginx/html
:网站文件默认存放目录sites-available
:则是管理大量站点时服务器的一种通用配置。sites-enabled
:则是一种单独配置,需要使用enabled
时,需要使用ln
命令软连接到相应网站。
1 | sudo ln -s ~/path/to/your/mysite/mysite_nginx.conf /etc/nginx/sites-enabled/ |
/etc/nginx/nginx.conf
中有如下语句:1
2include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
可见,配置文件放在sites-avaliable
文件夹中,需要创建软连接在sites-enabled
中,才会生效。
server_name
的作用其实是当该机器上同时部署了其他域名服务时起作用的。
如果nginx中只配置一个server域的话,则nginx是不会去进行server_name的匹配的。因为只有一个server域,也就是这有一个虚拟主机,那么肯定是发送到该nginx的所有请求均是要转发到这一个域的,即便做一次匹配也是没有用的。还不如干脆直接就省了。如果一个http域的server域有多个,nginx才会根据$hostname去匹配server_name进而把请求转发到匹配的server域中。此时的匹配会按照匹配的优先级进行,一旦匹配成功进不会再进行匹配
参考:
- nginx server_name怎么可有可无
location
接受两个参数,一个字符串或者正则,和一段代码。字符串用于匹配某个特定目录。
1 | location / { |
注意点
nginx 默认的账号权限太低,没有部分文件的访问权限,导致访问时出现 403 Forbidden
。
配置文件 /etc/nginx/nginx.conf
:1
user nginx;
应该修改为:1
user root;
Nginx运行
1 | /usr/sbin/nginx -h # 查看帮助 |
1 | /usr/sbin/nginx -c /etc/nginx/nginx.conf # 默认也会读取该配置文件,所以,可以不加-c参数 |
FAQ
Q1:nginx: [error] open() “/usr/local/var/run/nginx.pid” failed (2: No such file or directory)
- nginx 重启报错:nginx
Q2:中文乱码
Nginx的server的配置内容,增加一行:charset utf-8;
- Nginx 显示中文乱码解决
Q3:权限问题导致Nginx 403 Forbidden错误的解决方法
- 权限问题导致Nginx 403 Forbidden错误的解决方法
参考
- 写给Web开发人员看的Nginx介绍
- nginx配置初探
- nginx配置文件参数详解(完整版)
- Nginx浏览目录配置及美化