Nginx配置入门
目录
- 认识Nginx
- 起步
什么是Nginx?能干啥?
官方自述
High Performance Load Balancer, Web Server, & Reverse Proxy
翻译过来就是 一个高性能的负载均衡器,Web服务器和反向代理服务器。
Nginx能提供Web服务(实现http协议),反向代理网站和多个站点的负载均衡调控。Nginx高并发负载下性能表现极其优秀,因此高性能是Nginx的一大特色。
随着现在Nginx的发展,拓展也在不断的增多,如今Nginx能提供的服务已经不再局限于HTTP协议了(如RTMP网络推流服务器)
起步
安装Nginx
环境
- 操作系统:GNU/Linux
为了专注于Nginx本身而避免其他各种不必要的麻烦和其他因素,这里采用使用Linux的软件包管理器进行安装(注:安装时需要root权限)
Debian系
apt install nginx
Red Hat系
yum install nginx
安装成功后,在浏览器中输入服务器的ip地址,即可访问到Nginx的默认站点(如下图)
这个是Nginx安装后默认配置的一个站点,能访问到它就说明Nginx正常运行。那么现在,我们就可以对Nginx的配置下手了,利用搭建我们自己的第一个网站啦
认识Nginx配置文件
使用Linux软件包管理器apt或yum安装的nginx配置文件目录在/etc/nginx
,如果是编译安装,则在nginx目录下的etc
文件夹
使用命令ls 观察发现这里有一大堆的配置文件,是不是感觉无从下手?没关系,nginx有一个配置文件入口配置文件nginx.conf
,nginx启动时,第一个读取的配置文件就是这个,至于其他的配置文件nginx要如何读取,也是在这个文件中配置的。
安装完nginx,它有个默认配置的站点,那么能不能在nginx.conf中找到这个站点的蛛丝马迹呢?当然可以!
在此之前,我们先了解下nginx配置文件的语法规则
nginx配置语法规则
- 与命令行一样,选项与参数,参数与参数之间要有空格
- 每一个配置选项末尾必须要以英文半角分号
;
结尾 - 每行的井号
#
后面的内容为注释
我们关注下nginx.conf文件中的http { xxx }
这块配置(也就是被http { xxx }
包围起来的那部分,这部分是nignx的http服务的配置,里面定义了nginx处理http协议的各种参数,这里大部分我们现在暂时都不需要手动修改,保持默认即可。
在http { ... }
配置块最后两行,是两条include
配置
http {
# ---- 其他各种默认配置参数(略) ----
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
这个和C语言编译器的#include
预处理指令的效果是类似的,这里是把目录
/etc/nginx/conf.d/
下所有文件名以.conf
结尾的文件
和
/etc/nginx/sites-enabled/
下的所有文件内容导入(可以理解为复制粘贴)进http { ... }
块中。
我们查看下/etc/nginx/conf.d/
和/etc/nginx/sites-enabled/
这两个目录,前者是空的,后者有个名为default
的文件,顾名思义,这个极有可能就是默认站点的配置文件了。
用你自己喜欢的文本编辑器(如vi/vim,nano)打开/etc/nginx/sites-enabled/default
文件,除去注释,有效配置只有一个server { ... }
块内容,内容如下:
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
try_files $uri $uri/ =404;
}
}
而前面有提到,nginx.conf
中的http { ... }
代码块最后两行有两条include
配置选项,那么就不难理解,逻辑上/etc/nginx/sites-enabled/default
文件的内容被插入到了nginx.conf
中的http { ... }
块中,这时,文件nginx.conf
的配置内容可以看作与如下内容等价:
# nginx.conf的其他配置(略)
http {
# http块的其他配置(略)
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
try_files $uri $uri/ =404;
}
}
}
总结:
- 在
nginx.conf
的http { ... }
代码块中,一个server { ... }
块定义了一个站点,同时推测可知:在nginx.conf
的http { ... }
代码块中,编写多个server { ... }
块,就能定义多个站点了。 - 用包管理器安装nginx时,默认配置中并没有直接在在
nginx.conf
的http { ... }
代码块中写入server { ... }
块,而是通过include
指令,引入外部其他文件编写的server { ... }
块配置,这种方式能避免当存在多个站点时导致nginx.conf
文件过于复杂,同时可以分离nginx本体运行配置和站点配置,提高了管理效率。网上很多nginx配置站点的教程,是直接在nginx.conf
的http { ... }
块中编写server { ... }
块,这种方式其实并不推荐,更好的方式应该是在单独的外部文件中编写nginx站点(即server { ... }
块)。
创建第一个站点
在了解了上面的nginx配置基础后,我们可以开始着手配置我们自己的站点了。
首先,安装nginx时的默认站点我们就不需要了
第一步:移除默认站点。
前面有说明,nginx的默认站点的配置就在/etc/nginx/sites-enabled/default
,这个文件在nginx.conf
中被http { ... }
块下的include /etc/nginx/sites-enabled/*;
配置所引入。
要移除这个站点,根据如上所述的站点配置文件加载的流程,我们只需打断其中的任意一个环节即可导致这个默认站点失效
- (不推荐)直接删除
/etc/nginx/sites-enabled/default
文件 (文件中的有大量的注释和官方示例配置,是官方文档的一部分) - (不推荐)注释掉
/etc/nginx/sites-enabled/default
文件中的server { ... }
块(有10行呢,还是零零散散的,太麻烦) - (推荐) 在文件
nginx.conf
的http { ... }
块中加#
注释掉include /etc/nginx/sites-enabled/*;
(最小程度的更改)
第二步:上传网站文件
使用WinScp,XShell等工具将网站上传至服务器,如上传至/var/www/demo
。若服务器中已有网站可跳过该步骤。
直接在服务器上使用文本编辑器临时编写一个Hello World网页也行
第三步:创建并编辑站点配置文件
还记得在nginx.conf
的http { ... }
代码配置块中,是有两条include
配置的吧,我们把默认站点的给注释掉了,那么就剩下了include /etc/nginx/conf.d/*.conf;
了
现在,我们就可以在/etc/nginx/conf.d
目录中创建我们的站点配置文件了,文件记得必须以.conf
结尾噢。
一般情况下,我个人推荐一个配置文件 只配置一个项目的server { ... }
块。
实操:
- 在
/etc/nginx/conf.d
创建并编辑一个名为demo.conf
(文件名自定义,只要是.conf
结尾即可)的文件
[root@xiaotao233: /etc/nginx/conf.d]# nano demo.conf
- demo.conf文件内容
server {
listen 80; # 站点使用80端口(http协议默认端口)
root /var/www/demo; # 网站在服务器的目录
index index.html; # 配置默认主页文件名
}
第四步:Nginx平滑重载让配置生效(需要root权限)
Nginx支持在不中断现有服务的情况下,重载配置。
为了防止配置出错导致Nginx停止运行中断服务,因此一般情况下,在重载Nginx之前,需要用以下命令先检查配置是否正确
nginx -t
若有如下输出则表示配置正确无异常
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
然后使用以下命令即可重载Nginx
nginx -s reload
至此,站点已配置完成
第五步:访问网站
直接在浏览器输入服务器IP地址即可访问到网站
评论
还没有任何评论,你来说两句吧!