Nginx配置文件解读

初始化安装

nginx的安装较为简单,只需在apt更新之后运行命令apt-get install nginx。安装之后在浏览器中访问本机的ip地址,会看到“welcome to nginx”,OK一切正常。

此处说明一下,127.0.0.1、localhost和本机ip的区别。首先localhost是域名,指向的是127.0.0.1这个本机环路虚拟地址,在Windows的hosts文件或Linux的 /etc/hosts 文件中可以看到,访问这二者是不需要联网的,本机IP地址可以由本机或从外部访问,是本机对外开放的地址,这个地址是与物理网卡绑定的IP地址。

查找nginx目录

在通过apt安装nginx后,它为我们提供了一个基本结构,并快速的设置好了配置文件。所有的nginx的配置文件都在 /etc/nginx/ 下(此处只提供了Linux环境下的配置文件位置,Mac环境中使用homebrew安装的配置文件的位置与Linux环境有所不同)。需要添加新的配置的位置在 /etc/nginx/sites-enabled/,在此目录下包含一个default文件,这个文件就是nginx首页的默认配置文件。接下来尝试建立自己的配置文件用于显示一个页面。在sites-enabled目录下新建一个空白文件命名为test,然后进行编辑。

  • 注意: 在 /etc/nginx/ 目录下包含一个sites-available目录,这个目录一般在需要建立和管理多个站点的时候非常有用,可以帮助你更好的组织不同的项目,你需要在这里添加你的nginx配置文件并将它们链接至sites-enabled目录下,命令如下:
  • ln -s /etc/nginx/sites-available/dotcom /etc/nginx/sites-enabled/doctom

只有在 sites-enabled 目录下的配置文件才能真正被用户访问,但是同样可以将文件放在site-available目录下用来存档或者生成链接

配置静态服务器

Nginx配置文件有自己的格式,好消息是格式相当简单,看起来想css文件,先制定变量名,然后在花括号中编写命令,最顶层是server代码:

server {

}

  • listen 声明服务器监听的端口号。SSL在443端口,http默认端口是80,因此在URL中未定义端口的话一般为80,因为很有可能是去运行一个线上的服务器,因此最好定义监听端口为80。

    server{
    	listen 80;
    }
    

    默认端口严格来讲不是必要的,但是为了能够保证对整个流程足够了解,最好加上。接下来进入server_name

  • server_name 主要用来匹配URL地址,任意请求通过nginx时,它会查看URL并寻找server_name片段,如果你的站点是http://acmer.com,那么server_name应该为acmer.com,如果在域名解析时用了A记录并通过服务器指向http://xxx.com,你可以添加另外一个server代码,将server_name指向xxx.com,这段代码就会匹配来自这个域名的请求。

  • 这个特性非常强大,这意味着你可以在单个nginx配置文件里托管无数站点,甚至包括不同域名的网站,你需要做的只是讲设置A记录并指向主机所在的IP,之后设置其他的nginx服务器配置。

  • 针对server_name还有两点需要关注,首先是可以设置子域名。如果想要匹配http://test.example.com,设置相当简单,甚至可以指向一个完全不同的应用。第二是可以使用通配符,或者正则匹配路由。下面简单配置下server_name到example.com

server {
	listen 80;
	server_name example.com
}

Nice,再进行一些配置就可以运行服务器了。

  • root
    这个是托管静态站点最关键的部分,如果只是想托管一些html和css文件,root部分要定义这些文件存放的路径,我喜欢把文件放在/var/www/目录下,因此在这个目录下建立一个目录,/var/www/example/,在这个目录下新建一个空表的html文件,随意输出一些代码
server {
	listen 80;
	server_name example.com;
	root /var/www/example;
}

基本变量配置完毕,下一步配置路由。

  • location 接收两个参数,一个字符串或正则表达式,和一段代码。字符串或正则用于匹配一个特定目录,如果你想让用户在访问example.com/whatever 时访问某个特定的页面,需要将whatever 设置为uri地址,在这里我们只要访问root目录,因此只需加上 / 内容暂时为空,稍后解释。
server {
	listen 80;
	server_name example.com;
	root /var/www/example;
	
	location / {
	
	}
}

第一个参数可以有很多种写法。在以上区块内,我们需要路由指向结果页面,注意 / 会匹配所有的URL地址,因为在这里它被解释成一个正则,如果指向匹配某一个准确的字符串,主需要在上面加一个等号。

location = / {...}

现在我没要完成之前的代码,我们可以在区块内添加另一段指令,用于加载名为try_files的文件。 try_files接收一组文件名或正则,用于在根目录下查找,并会加载找到的第一个结果。对于我们的静态服务器来讲,我们希望找到一个在 / 之后紧跟着whatever的文件,例如:whatever.html,如果在 / 后面没有任何内容,则会寻找 index.html。这里我们进行简单的配置。

server {
	listen 80;
	server_name example.com;
	root /var/www/example;

	location / {
			try_files $uri $uri/ /index.html
	}
}

你可能会奇怪上面的$uri是从哪来的?其实是nginx提供的。每次有请求时,nginx会生成一系列变量,这些变量存储了请求的相关信息。

  • 来自http://example.com的请求进入。
  • nginx找到server片段代码,其中server_name为example.com,并使用它来处理请求。
  • nginx匹配任意请求。因为这里的 / 会匹配根域名下的任意内容。
  • 在匹配到的location代码中,nginx开始尝试加载一个文件。首先寻找一个未命名的文件,因为这里的uri匹配的就是没有名称的文件,所以无法找到,接着开始查找未命名的目录,依然无法找到,最后开始查找并加载根目录。下的 /index.html。

接下来想象一下如果添加一个名为test.html的文件到根目录下并访问 http://example.com/test.html,可以自己尝试一下。

可以任意的尝试修改这里的配置变量。例如,在访问一个网站时,用户访问某一个文件并没有加上 .html 的后缀,try_files同样会查找 $uri.html 并匹配相应的结果,因此在访问 http://example.com/whatever和http://example.com/whatever.html会得到相同的文件,你可以充分发挥想象力设置配置文件。

启动服务

总结一下配置的步骤。首先添加server选项,在nginx运行时,会查找 /etc/sites-enabled 目录下的所有配置文件用于显示对应内容。但是请等一下,你可能无法马上得到结果,因为nginx并不知道你所做的改动。为了让nginx真正读取到配置文件,需要重启服务器
service nginx reload

  • 注意:
    这里service命令实际上是调用了配置文件里的内容,这些都在使用apt是被生成。这里调用的实际上是 /etc/init.d/nginx reload

猜你喜欢

转载自blog.csdn.net/pikachu_12138/article/details/103777127