说明:Nginx是静态资源服务器,可以部署静态资源,并对请求进行策略分发。
下载
第一步:可在官网(http://nginx.org/en/download.html)下载,建议安装稳定版本(Stable version)
第二步:将文件解压到一个没有中文的路径下,我这里解压到D盘x86文件夹下
第三步:双击nginx.exe程序,会出现黑色的窗口一闪而过,在任务管理器中可以看到两个Nginx程序(只有一个表示程序启动错误,有四个或成对多于四个表示双击执行了多次nginx.exe,也会错误)
第四步:打开浏览器,输入http://localhost/(Nginx默认端口是80,Http默认访问的端口也是80,所以不需要再指定端口号),出现Nginx的Welcome页面,表示Nginx启动成功
使用
需要知道的是,在Nginx目录下,html文件夹内是存放静态资源文件的,conf文件夹是存放配置,log文件夹是存放日志文件的。使用Nginx部署自己的静态资源,首先把自己的项目放到html文件夹里面,后面修改Nginx的配置文件,配置访问路径。
例如,现在我有一个项目(my-project),有一个index.html静态页面和一个js文件夹,现在把它们放在Nginx的html文件夹下
在配置文件中修改访问路径
配置完成后需要重启以下Nginx,注意需要在Nginx.exe目录下
配置完后,在页面输入http://localhost/,此时访问的资源就是我们部署的项目
分发请求
在idea中创建一个Controller接口,访问链接为:http://localhost:8080/hello/
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
@RestController
public class NginxController {
@RequestMapping("/hello")
public String hello(){
return "Hello";
}
}
在Nginx配置文件中配置,将请求分发到Tomcat部署的项目中来。如果链接是http://localhost/hello/,就将请求分发到:http://localhost:8080/hello(Tomcat部署的项目)
打开浏览器,输入http://localhost/hello/
这就是Nginx的分发请求用法,使用该方法,可以解决跨域问题(参考:http://t.csdn.cn/wioeK)
轮询
在Controller中创建下面这个方法,方法返回当前项目使用的端口号。
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
@RestController
public class NginxController {
@RequestMapping("/hello")
public String hello(HttpServletRequest request){
return "Hello" + request.getLocalPort();
}
}
开启两个窗口,一个端口号为8080,一个端口号为8081
在Nginx配置,表示http://localhost/hello/请求路径,转发给127.0.0.1:8080/hello(即http://localhost:8080/hello)或者127.0.0.1:8081/hello(http://localhost:8081/hello),默认为轮询,即轮流访问。
重新加载Nginx,页面输入http://localhost/hello/
权重
在轮询的基础上,可以对反向代理的服务设置权重,权重越高,表示访问次数越多。如下,表示127.0.0.1:8080/hello、127.0.0.1:8081/hello按照2比1的比例访问
重新加载Nginx配置,打开浏览器输入http://localhost/hello/,可看到两个反向代理的请求按比例接收
总结
Nginx是静态资源服务器,可以将前端发送的动态请求转发到后端服务器。除了分发请求,Nginx还提供了一些分发策略,除了上面介绍的轮询、权重,还有以下策略。
ip_hash:依据ip分配方式,这样每个访客可以固定访问一个后端服务;
least_conn:依据最少连接方式,把请求优先分配给连接数少的后端服务;
url_hash:依据url分配方式,这样相同的url会被分配到同一个后端服务;
fair:据响应时间方式,响应时间短的服务将会被优先分配;