Nginx
是一款自由的、开源的、高性能的HTTP服务器和反向代理服务器;同时也是一个IMAP
、POP3
、SMTP
代理服务器;Nginx
可以作为一个HTTP
服务器进行网站的发布处理,另外Nginx
可以作为反向代理进行负载均衡的实现。
Nginx
现在几乎是众多大型网站的必用技术,大多数情况下,我们不需要去详细的配置它,但是了解它在应用程序中所担当的角色,以及如何解决这些问题是非常有必要的。下面就从基本概念开始介绍:
正向代理与反向代理
代理是在服务器和客户端之间架设的一层服务器,代理将接收客户端的请求并将它转发给服务器,然后将服务器的响应转发给客户端。
不管是正向代理还是反向代理,实现的都是上面的功能。
正向代理
位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并制定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。
正向代理是为客户端服务的,客户端可以根据正向代理访问到它本身无法访问到的服务器资源。
正向代理对客户端是透明的,对服务端是非透明的,即服务端并不知道自己接收到的是来自代理的访问还是来自真实客户端的访问。
反向代理
反向代理(
Reverse Proxy
)方式是值以代理服务器来接收连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到结构返回给请求连接的客户端,此时代理服务器对外表现为一个反向代理服务器。
反向代理是为服务端服务的,反向代理可以帮助服务器接收来自客户端的请求,帮助服务器做请求的转发、负载均衡等。
反向代理对服务端是透明的,对客户端是非透明的,即客户端并不知道自己访问的是代理服务器,而服务器知道反向代理在为它服务。
基本配置
配置结构
下面是Nginx
配置文件的基本结构
events {
}
http
{
server
{
location path
{
...
}
location path
{
...
}
}
server
{
...
}
}
main
: Nginx的全局配置,对全局生效。events
: 配置影响Nginx服务器或与用户的网络连接。http
: 可以嵌套多个server
,配置代理、缓存、日志等绝大多数功能和第三方模块的配置。server
: 配置虚拟主机的相关参数,一个http
中可以有多个server
。location
: 配置请求的路由,以及各种页面的处理情况。upstream
: 配置后端服务器的具体地址,负载均衡不可或缺的部分。
常用内置变量
下面是Nginx
一些配置中的内置全局变量,你可以在配置的任意位置使用它们。
变量名 | 功能 |
---|---|
$host |
请求信息中的Host ,如果请求中没有Host 行,则等于设置的服务器名 |
$request_method |
客户端请求类型,如GET 、POST 等 |
$remote_addr |
客户端的IP 地址 |
$remote_port |
客户端的端口 |
$args |
请求中的参数 |
$content_length |
请求头中的Content-length 字段 |
$http_user_agent |
客户端User-Agent 信息 |
$http_cookie |
客户端的cookie 信息 |
$server_protocol |
请求使用的协议,如HTTP/1.0 、HTTP/1.1 |
$server_addr |
服务器地址 |
$server_name |
服务器名称 |
$server_port |
服务器端口号 |
前端可以用Nginx做些什么
解决跨域
跨域定义
跨域指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对JavaScript
施加的安全限制。
同源定义
如果两个页面的协议、端口、域名都相同,则这两个页面同源。
URL | 结构 | 原因 |
---|---|---|
http://clearlove.com/dir/a.html | 成功 | |
http://clearlove.com/dir2/b.html | 成功 | |
https://clearlove.com/dir/a.html | 失败 | 不同协议(http和https) |
http://clearlove.com:81/dir/a.html | 失败 | 不同端口(80和81) |