1. 简单介绍
Nginx 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。
Nginx由内核和模块组成,其中,内核的设计非常微小和简洁,完成的工作也非常简单,仅仅通过查找配置文件将客户端请求映射到一个localtion block(location是Nginx配置中的一个指令,用于URL匹配),而在这个location中所配置的每一个指令将会启动不同的模块去完成相应的工作。
2、主要特点
3、主要功能
反向代理
反向代理服务器位于客户端浏览器和web服务器之间,客户端不能直接向web服务器发请求,所有的请求都必须先发给反向代理服务器,然后由反向代理服务器转发给web服务器,同样,web服务器返回的响应也要先发给反向代理服务器,然后再转发给客户端。反向代理服务器发挥反向代理作用时就起到了一个中转站的作用。

保存配置文件后启动Nginx,这样当我们访问localhost的时候,就相当于访问localhost:8080了
反向代理服务器可实现三大功能:
保护网站安全。客户端无法直接访问到网站的web服务器,所有请求必须先经过反向代理服务器,相当于在web服务器和可能的网络攻击之间建立了一个屏障。
缓存网站的静态资源,提高网站的响应速度。当用户第一次访问静态内容的时候,静态内容就被缓存在反向代理服务器上,这样当其他用户访问该静态内容的时候,就可以直接从反向代理服务器返回,加速web请求响应速度,减轻web服务器负载压力。
负载均衡。反向代理服务器位于web服务器前面,这个位置正好也是负载均衡服务器的位置,所以大多数反向代理服务器同时提供负载均衡的功能。
正向代理
正向代理,意思是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端才能使用正向代理。当你需要把你的服务器作为代理服务器的时候,可以用Nginx来实现正向代理,但是目前Nginx有一个问题,那么就是不支持HTTPS
负载均衡
负载均衡也是Nginx常用的一个功能,负载均衡其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。简单而言就是当有2台或以上服务器时,根据规则随机的将请求分发到指定的服务器上处理,负载均衡配置一般都需要同时配置反向代理,通过反向代理跳转到负载均衡。而Nginx目前支持自带3种负载均衡策略,还有2种常用的第三方策略
负载均衡指的是多个服务器共同完成一件事情,核心是“分摊压力”。Ngnix实现负载均衡指的是将请求转发给服务器集群。Ngnix默认处理负载均衡的方式是“轮询”,我们可以通过weight来调整权重。
简单配置-权重:
upstream tomcat1 {
server localhost:8080 weight=9;
server localhost:8081 weight=1;
}
server {
listen 80;
server_name www.jd.com;
location / {
proxy_pass http://tomcat1;
index index.html index.htm;
}
}
#weight 控制访问权重
简单配置-轮巡:
upstream test {
server localhost:8080;
server localhost:8081;
}
server {
listen 81;
server_name localhost;
client_max_body_size 1024M;
location / {
proxy_pass http://test;
proxy_set_header Host $host:$server_port;
}
}
#分配到不同的后端服务器,如果后端服务器下掉,能自动剔除
简单配置-ip_hash
upstream test {
ip_hash;
server localhost:8080;
server localhost:8081;
}
#当我们的程序不是无状态的时候(采用了session保存数据),这时候就有一个很大的很问题了,比如把登录信息保存到了session中,那么跳转到另外一台服务器的时候就需要重新登录了,所以很多时候我们需要一个客户只访问一个服务器,那么就需要用iphash了,iphash的每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
简单配置-HTTP服务器:
#Nginx本身也是一个静态资源的服务器,当只有静态资源的时候,就可以使用Nginx来做服务器,同时现在也很流行动静分离,就可以通过Nginx来实现。
server {
listen 80;
server_name localhost;
client_max_body_size 1024M;
location / {
root e:\wwwroot;
index index.html;
}
}
#这样如果访问http://localhost 就会默认访问到E盘wwwroot目录下面的index.html,如果一个网站只是静态页面的话,那么就可以通过这种方式来实现部署。
简单配置-动静分离:
upstream test{
server localhost:8080;
server localhost:8081;
}
server {
listen 80;
server_name localhost;
location / {
root e:\wwwroot;
index index.html;
}
# 所有静态请求都由nginx处理,存放目录为html
location ~ \.(gif|jpg|jpeg|png|bmp|swf|css|js)$ {
root e:\wwwroot;
}
# 所有动态请求都转发给tomcat处理
location ~ \.(jsp|do)$ {
proxy_pass http://test;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root e:\wwwroot;
}
}
#我们可以把HTML以及图片和css以及js放到wwwroot目录下,而tomcat只负责处理jsp和请求,例如当我们后缀为gif的时候,Nginx默认会从wwwroot获取到当前请求的动态图文件返回,当然这里的静态文件跟Nginx是同一台服务器,我们也可以在另外一台服务器,然后通过反向代理和负载均衡配置过去就好了,只要搞清楚了最基本的流程,很多配置就很简单了,另外localtion后面其实是一个正则表达式,所以非常灵活。
4、nginx的配置文件
基本目录:
$dir/wwwroot/ - 网站根目录,以域名为文件夹名称
./xuexb.com/
./static.xuexb.com/
$dir/src/ - 安装源包
$dir/local/nginx/ - nginx相关根目录
./conf/ - 配置文件
./nginx.conf - 配置主入口
./inc - 通用配置
./vhost/ - 各站点的配置,以 `域名.conf` 命名
./xuexb.com.conf
./static.xuexb.com.conf
./1.11.1/ - 各个版本的nginx
./1.11.2/
$dir/logs/ - 日志相关目录,内以 `域名.type.log` 命名
./last/ - 最新的日志
./xuexb.com.error.log
./xuexb.com.access.log
./back/ - 天级备份日志
./20170908/
#这样分离之后不管是 Nginx 主程序版本升级,还是修改某个站点配置,还是快速查找某个站点日志都是得心应手~
配置文件:
/export/servers/nginx/conf/nginx.conf
/约定目录/nginx-conf/
# nginx配置文件
./nginx.conf
# nginx的其他配置
./mime.types
# 站点配置
./conf/
# 各个子站点目录
./www.xxoo.com.conf
./www.a.com.conf
...
#目录里存放以网站为单位的配置文件,文件名以网站域名命名,这样可以配置分离,互不影响,而且好定位问题。