CentOS Nginx 安装及配置

概念

安装

1
2
apt-get install nginx # Ubuntu
yum install nginx -y # CentOS

配置文件

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
2
include /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域中。此时的匹配会按照匹配的优先级进行,一旦匹配成功进不会再进行匹配

参考:

location接受两个参数,一个字符串或者正则,和一段代码。字符串用于匹配某个特定目录。

1
2
3
location / {
autoindex on;
autoindex_exact_size off; # 默认是开,以b为单位,关闭后,会显示MB GB

注意点

nginx 默认的账号权限太低,没有部分文件的访问权限,导致访问时出现 403 Forbidden

配置文件 /etc/nginx/nginx.conf

1
user  nginx;

应该修改为:

1
user root;

Nginx运行

1
/usr/sbin/nginx -h # 查看帮助
1
2
3
4
5
/usr/sbin/nginx -c /etc/nginx/nginx.conf # 默认也会读取该配置文件,所以,可以不加-c参数
nginx # 运行/usr/sbin目录下的nginx的命令
nginx -s reload # 运行这句话的前提是,nginx正在运行,重载,如果之前运行了stop,那么会提示出错 "/run/nginx.pid" failed
service nginx start
service nginx status

FAQ

Q1:nginx: [error] open() “/usr/local/var/run/nginx.pid” failed (2: No such file or directory)

Q2:中文乱码

Nginx的server的配置内容,增加一行:charset utf-8;

Q3:权限问题导致Nginx 403 Forbidden错误的解决方法

参考

Michael翔 wechat
欢迎订阅 ヾノ≧∀≦)o
我知道是不会有人点的,但万一有人想不开呢👇