1、Nginx相关地址
源码:https://trac.nginx.org/nginx/browser
官网:http://www.nginx.org/
2、搬黄金(参考文章)
3、Nginx常用功能
- 反向代理
- 负载均衡
- 动静分离
4、概念理解
4.1、什么是正向代理 、什么事反向代理?
正向代理:代理发生在客户端是正向代理
反向代理:代理发生在服务端是反向代理。
4.2、什么是负载均衡
负载均衡:指将负载(工作任务)进行平衡、分摊到多个操作单元上进行运行(来自百度)
简单说明:负载即请求,操作单元即web服务器(如:tomcat)
4.3、什么是动静分离
动静分离:动静分离是指在web服务器架构中,将静态页面与动态页面或者静态内容接口和动态内容接口分开不同系统访问的架构设计方法,进而提升整个服务访问性能和可维护性。(来自百度)
简单说明:通过nginx可以对项目的前端代码和后端代码分开部署,一般项目都是部署在一个web服务器的(部署在同一个tomcat),使用了nginx后前端代码和后端代码就不用部署在同一个web服务器了
5、遇到的问题或需要注意的地方
5.1 动静分离相关的
5.1.1 root和alias的区别
- 作用域不同:root 可以在http、server、location、if等标签内配置,而alias只能配置在location标签中
- 解释location后面的uri结果不同:root的处理结果是root路径+location路径,alias的处理结果是使用alias路径替换location路径
- alias是一个目录别名的定义,root则是最上层目录的定义。
5.1.2、修改配置文件后,执行nginx -s reload命令后配置还是没有更改
可能之前启动的时候nginx被启动了多次,建议将nginx进程全部关掉,然后再次启动nginx
当多次启动nginx后,nginx停止命令(nginx -s stop或nginx - s quit)只能执行一次,比如启动两次nginx,执行停止命令后,关闭了其中一个nginx,再次执行nginx停止命令则会报错,另一个nginx则只能手动去停止其进程。不然你再次启动nginx,可能访问到的还是原来的那个启动未停止的nginx
5.1.3、静态资源路径配置要规范
配置静态资源路径的时候建议路径统一(即location后面的路径以“/”结尾,则alias路径也以“/”结尾,无“/”则同理),否则可能导致配置失效,静态文件访问不到。经测试root好像没有这个要求,但是建议统一下
location /static {
alias G:/nginx-test;
}
location /sstatic/ {
alias G:/nginx-test/;
}
5.1.4、假如通过nginx访问的文件内容乱码
在server配置块中加上配置: charset ‘utf-8’;
5.1.5、假如路径中有中有空格
下面配置在nginx启动的时候会报错,因为路径中有空格,如果路径中实在是有空格,请把alias中的路径放到英文双引号中(即"G:/nginx test";),root同理。
location /static {
alias G:/nginx test;
}
5.1.6、假如路径中有中文
下面配置在nginx启动的时候不会报错,但是访问静态资源的时候会报404,资源无法访问,解决方法:请把alias中的路径放到英文双引号中(即"G:/nginx test";),root同理。
location /static {
alias G:/nginx测试;
}
5.1.7、建议每次重启nginx的时候使用nginx -t 检查一下nginx配置是否正常
如果nginx启动的时候报错了,nginx还能正常访问,说明之前启动了多个nginx
5.1.8、测试静态资源的时候刷新建议用ctrl+f5,不然浏览器缓存可能会影响测试结果。
5.2 负载均衡相关的
5.2.1、如何配置负载均衡
至于如何配置负载均衡,看2中“Nginx 反向代理与负载均衡详解”
5.2.2、如何处理nginx session不共享的问题
Ip hash算法,对客户端请求的ip进行hash操作,然后根据hash结果将同一个客户端ip的请求分发给同一台服务器进行处理,可以解决session不共享的问题。
建议使用redis存储相关信息,因为如上处理,如果当前服务器宕机了,session就会随之丢失,redis则不会
5.2.3、在负载均衡下,有一台服务器宕机了,要做什么配置才不会影响用户使用
如果你的nginx服务器给2台web服务器做代理,负载均衡算法采用轮询,那么当你的一台机器web程序iis关闭,也就是说web不能访问,那么nginx服务器分发请求还是会给这台不能访问的web服务器,如果这里的响应连接时间过长,就会导致客户端的页面一直在等待响应,对用户来说体验就打打折扣,这里我们怎么避免这样的情况发生呢。(来自菜鸟教程)
这里的配置是写在location中的
proxy_connect_timeout 1; #nginx服务器与被代理的服务器建立连接的超时时间,默认60秒
proxy_read_timeout 1; #nginx服务器想被代理服务器组发出read请求后,等待响应的超时间,默认为60秒。
proxy_send_timeout 1; #nginx服务器想被代理服务器组发出write请求后,等待响应的超时间,默认为60秒。
proxy_ignore_client_abort on; #客户端断网时,nginx服务器是否终端对被代理服务器的请求。默认为off。
proxy_next_upstream timeout; #反向代理upstream中设置的服务器组,出现故障时,被代理服务器返回的状态值。