Nginx使用总结

1. Nginx是什么

Nginx:是一个高性能的HTTP和反向代理web服务器。

1.1 什么是正向代理和反向代理

正向代理:它隐藏了真实的请求客户端,服务端不知道真实的客户端是谁,客户端请求的服务都被代理服务器代替来请求,某些上网工具扮演的就是典型的正向代理角色。用浏览器访问http://www.google.com时,被残忍的block,于是你可以在国外搭建一台代理服务器,让代理帮我去请求google.com,代理把请求返回的相应结构再返回给我。

# 正向代理到baidu 服务
location = /baidu.html {
         proxy_pass http://www.baidu.com;
}

# 反向代理至 本机的8010服务
location /luban/ {
     proxy_pass http://127.0.0.1:8010;  
}

反向代理:隐藏了真实的服务端,当我们请求ww.baidu.com 的时候,就像拨打10086一样,背后可能有成千上万台服务器为我们服务,但具体是哪一台,你不知道,也不需要知道,你只需要知道反向代理服务器是谁就好了,www.baidu.com 就是我们的反向代理服务器,反向代理服务器会帮我们把请求转发到真实的服务器那里去。

正向代理是为客户端代理,反向代理是为服务端代理。



2. Nginx配置文件的整体结构




2.1 全局块配置【该部分配置主要影响Nginx全局】

  • 配置运行Nginx服务器用户(组)
  • worker process数
  • Nginx进程PID存放路径
  • 错误日志的存放路径
  • 配置文件的引入

2.2 events块【该部分配置主要影响Nginx服务器与用户的网络连接】

  • 设置网络连接的序列化
  • 是否允许同时接收多个网络连接
  • 事件驱动模型的选择
  • 最大连接数的配置

2.3 http块

  • 定义MIMI-Type
  • 自定义服务日志
  • 允许sendfile方式传输文件
  • 连接超时时间
  • 单连接请求数上限

2.4 server块

  • 配置网络监听
  • 基于名称的虚拟主机配置
  • 基于IP的虚拟主机配置

2.5 location块

  • location配置
  • 请求根目录配置
  • 更改location的URI
  • 网站默认首页配置



3. Nginx核心功能

  • 反向代理
  • 负载均衡
  • 动静分离

3.1 反向代理

// 下面的意思是
访问localhost,端口号9001,若路径带有hosp则访问到localhost:8201。
server {
        listen       9001;
        server_name  localhost;

	location ~ /hosp/ {           
	    proxy_pass http://localhost:8201;
            index   index.html index.htm index.jsp;
	}
	location ~ /cmn/ {           
	    proxy_pass http://localhost:8202;
	}
}

// 关于listen    该指令用于配置网络监听。  用法如下
  listen  *:80 | *:8080         #监听所有80端口和8080端口
  listen  IP_address:port      #监听指定的地址和端口号
  listen  IP_address           #监听指定ip地址所有端口
  listen  port                  #监听该端口的所有IP连接


// 关于server_name    该指令用于虚拟主机的配置。
// 通常分为以下两种:
// 1. 基于名称的虚拟主机配置
  server_name   123.com www.123.com      多个名称,中间用空格隔开。而每个名称由两段或者三段组成,每段之间用“.”隔开。
  server_name   *.123.com www.123.*      可以使用通配符“*”,但通配符只能用在由三段字符组成的首段或者尾端,或者由两端字符组成的尾端。
  server_name   ~^wwwd+.123.com$;     还可以使用正则表达式,用“~”作为正则表达式字符串的开始标记。

// 2. 基于IP地址的虚拟主机配置
  server_name 192.168.1.1                语法结构和上述域名匹配一样,而且不需要考虑通配符和正则表达式的问题。



// 关于location       该指令用于匹配 URL
  location [ = | ~ | ~* | ^~] uri {

  }

// proxy_pass         该指令用于设置被代理服务器的地址。可以是主机名称、IP地址加端口号的形式。
  proxy_pass URL;  URL 为被代理服务器的地址,可以包含传输协议、主机名称或IP地址加端口号,URI等。

// index            该指令用于设置网站的默认首页
  index  filename ...;   后面的文件名称可以有多个,中间用空格隔开。

3.2 负载均衡

通过上述proxy_pass 可以把请求代理至后端服务,但是为了实现更高的负载及性能, 我们的后端服务通常是多个, 这个是时候可以通过upstream 模块实现负载均衡。

// 轮询【默认】
// 权重【用weight来指定轮询的几率】  
// ip哈希【确保了相同的客户端的请求一直发送到相同的服务器,以保证session会话。这样每个访客都固定访问一个后端服务器,可以解决session不能跨服务器的问题】
// 最少连接数【把请求转发给连接数较少的后端服务器。轮询算法是把请求平均的转发给各个后端,使它们的负载大致相同;但是,有些请求占用的时间很长,会导致其所在的后端负载较高。这种情况下,least_conn这种方式就可以达到更好的负载均衡效果】
// fair(第三方)按后端服务器的响应时间来分配请求,响应时间短的优先分配。 
// url_hash(第三方)按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。 

upstream tomcat_server{
        server 127.0.0.1:8000
        server 127.0.0.1:9000

}
server {
        listen       9001;
        server_name  localhost;

	location ~ /hosp/ {           
	    proxy_pass http://tomcat_server;
            index   index.html index.htm index.jsp;
	}
	location ~ /cmn/ {           
	    proxy_pass http://tomcat_server;
	}
}
原文地址:https://www.cnblogs.com/itlihao/p/14545877.html