Nginx的使用

来源:互联网 发布:ibm linux 编辑:程序博客网 时间:2024/05/29 18:10

本来Nginx是可以放到linux环境配置中的,但是为什么单独开一篇呢?
因为它有点重要,有多重要呢?
看着看着你就知道了。

Nginx介绍

Nginx 是一个很强大的高性能 Web和 反向代理服务器

这里不得不提一下反向代理这个概念,提到反向代理,就肯定有正向代理,我们就看一下这两者的区别。

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

最后简单的总结如下:
1.正向代理的时候,服务端不知道真正的客户端是谁,因为客户端的请求都由代理服务器发送。
2.而反向代理正好相反,客户端不知道处理它请求的真正服务器是哪个,因为反向代理服务器会把请求发送到真实服务器去。

如果你有特地去了解Nginx都能干什么的话,你就会发现Nginx好像能干好多东西啊,比如防盗链,日志监控,静态资源服务器,反向代理服务器,负载均衡等,这些只是一些常用的功能。

本文主要介绍静态资源服务器,反向代理服务器,负载均衡这几种用法,其他内容暂不涉及。

当然在讲这些内容之前,肯定没办法跳过这个

Nginx的安装

这个我就直接用现成的了。Linux安装Nginx

Windows下就更简单了,直接下个zip压缩包,解压即用。

启动Nginx的命令是
./nginx -c ../conf/nginx.conf
要配合配置文件一起启动。
也可以使用./nginx -h查看命令帮助

Nginx的配置

进入Nginx文件路径/conf,然后对nginx.conf文件进行编写。
这里我们首先修改一下Nginx的日志格式,方便我们进行日志统计。

log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '                      '$request_time $request_length '                      '$status $body_bytes_sent "$http_referer" '                      '"$http_user_agent" "$upstream_addr"  "$http_x_forwarded_for"';

简单的讲一下各个字段都是什么含义吧。
$remote_addr——远程客户端IP地址
$remote_user——记录客户端用户名称
$time_local——记录访问时间
$request——记录请求的URL和HTTP协议
$request_time——整个请求的总时间
$request_length——记录请求长度(包括请求行,请求头,请求体)
$status——记录请求状态
$body_bytes_sent——记录发送给客户端文件内容大小
$http_referer——记录从哪个页面链接访问过来的
$http_user_agent——记录客户端浏览器相关信息
$upstream_addr——upstream地址,即真正提供服务的主机地址
$http_x_forwarded_for——客户端的真实ip
通常web服务器放在反向代理的后面,就不能获取客户的ip了,通过$remote_addr拿到的ip是反向代理服务器的ip地址。反向代理服务器在转发请求的http头信息中,可以增加x_forwarded_for信息,用以记录原有客户端的ip和原来客户端的请求的服务器地址。

之后的对于Nginx的配置也都是在这个文件中进行配置。

每次修改完配置文件后,都应该使用命令重启Nginx。
在Nginx路径下/sbin
./nginx -s reload

接下来进入正文

静态资源服务器

此时需要配置Server块,所以我们回到之前的nginx.conf文件中。
我们看如下配置:

server {       listen 80;  server_name localhost;  location / {   root D:\www;   index index.html index.htm;  }  location /images/ {   root D:\image;   autoindex on;  }}

这里每个字段的意思是:

listen:监听的端口

server_name:你的IP或域名,自己随便取名是不允许的!(除非你使用的是子域名,但子域名已经在hosts文件中进行了相关配置,不然也是不可以的)

location块:该处是一个定位的功能,比如上面的代码中,/代表所有url的匹配,root定义的是本地的资源包,index定义的是导航页面;下面的代码是匹配/images/的url,如localhost/images/1.jpg,autoindex进行自动匹配资源。

这样一个静态服务是配好了,但是问题来了,我的服务访问自己定义的index.htm页面没问题,但是访问静态资源图片时就出现404错误。

问题的关键在于关键字root和alias的区别:附链接http://blog.csdn.net/line_aijava/article/details/71473793
正确的代码块应该是

location /images/ {   alias D:\image\;   autoindex on;}

这里那个alias后的\不能少
这里的意思就是,如果我使用root访问源文件夹,那么Nginx请求会有一个拼接的过程
比如我打出的url为http://localhost/image/1.jpg
关键字为root的请求为http://localhost\image/image/1.jpg
而使用alias关键字后,请求的url就是http://localhost/image/1.jpg

这样一个简单的静态资源配置就完成了,如果想要涉及复杂一点的,可能会涉及到正则表达式,所以内容还蛮多的。

反向代理服务器

这里再配置一下nginx.conf

 server {        listen       80;        server_name  localhost;        #charset koi8-r;        #access_log  logs/host.access.log  main;        location / {            proxy_pass http://localhost:8080;            root   html;            index  index.html index.htm;        }}

这部分代码的含义就是监听80端口,然后反向代理的是本地的8080端口。

起关键作用的一句是proxy_pass http://localhost:8080;

负载均衡

什么是负载均衡呢?

说白了,就是我们配置了多台服务,然后提升性能的一种方式,只要还有某个服务还在运作,我们就还可以正常访问服务;同时这也是一种缓解服务压力的方法,当大批量请求过来的时候,我们可以通过负载均衡将请求分发,以此缓解压力。

看一下如何配置

upstream mytest{        server ip:8080;        server ip:8090;    }    server {        listen       80;        server_name  localhost;        #charset koi8-r;        #access_log  logs/host.access.log  main;        location / {            proxy_pass http://mytest;            root   html;            index  index.html index.htm;        }     }

使用upstream代表负载均衡的分发块。然后在proxy_pass这个代理处填上http://your-upstream-name;。至此负载均衡就配置完成了。

负载均衡有几种策略,常用的有:轮询(比如我上面的举例);权重(在我上面的举例中,对每一个分发服务器加上关键字weight,后面跟上数字,然后就是简单的数学问题了);ip_hash等。

然后upstream中还有不少的关键字,代表每台设备的状态,整理如下:
down 表示单前的server暂时不参与负载
weight 默认为1.weight越大,负载的权重就越大。
max_fails :允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误
fail_timeout:max_fails 次失败后,暂停的时间。
backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。



对于nginx的介绍暂时先到这里,因为nginx内容广泛,所以本篇内容应该并没有结束,当我学到nginx的其他用法时,再回来续更。

原创粉丝点击