Nginx 教程二:利用nginx搭建静态文件服务、正向代理服务器、反向代理服务器

使用 Nginx 来提供静态文件服务

Nginx 一大经典使用场景就是用来提供静态文件服务,例如图片、html、脚本、样式文件等,这些文件没有必要交给 tomcat、jboss等应用服务器处理,使用 Nginx 直接处理将大大提高性能。用 Nginx 来提供静态文件服务十分简单,只需要添加一个 server 块指令即可。

假设我们的静态文件位于 /srv/www 目录下,有若干图片、html、脚本、样式等文件,在 http 指令中加入一个 server 指令即可,代码如下

1
2
3
4
5
6
7
8
9
#其他配置省略
...
http {
       server {
          location ~* \.(html|css|js|png|jpg|gif|ico)$ {
             root /srv/www ;
          }
       }
}

location指令用来映射请求到本地文件系统,这里我们使用了简单的正则表达式来匹配html、css、js、png、jpg、gif、ico这些为扩展名的请求,注意 location 指令中使用表达式要用 ~ 或者 ~* 符号指明,~表示区分大小写,~* 表示不区分大小写。而 root 指令用来指定文件在服务器上的基路径,这里指定为 /srv/www。

不是太好理解,举个例子,例如客户端发送了一个 GET 请求 http://localhost/images/logo.png,Nginx 接受到该请求后会将该请求分发到匹配的 location 中处理,显然上面我们写的 location 指令可以截获该请求,接下来 nginx 将 request_uri 和 root 拼接成服务器文件系统路径,这里 request_uri 为 /images/logo.png,root 为 /srv/www ,拼接后路径为 /srv/www/images/logo.png ,最后 nginx 将服务器该图片响应给客户端,如果不存在该文件,则返回 404 。

使用 Nginx 来提供正向代理服务器

① Nginx 另外一大经典使用场景就是用来作为代理服务器,通常和上述的静态文件服务器配合使用,来完成静态文件由 nginx 服务器提供,而复杂业务请求则由后面的应用服务器来处理。

配置 nginx 为代理服务器也很简单,同样在 http 上下文中添加一个 server 指令即可,这里我们以 tomcat 为例

1
2
3
4
5
6
7
8
9
10
11
12
13
#其他配置省略
http {
   server {
      #静态文件由nginx处理
      location ~* \.(html|css|js|png|jpg|gif|ico)$ {
          root /srv/www ;
      }
      #其他所有请求由tomcat处理
      location / {
          proxy_pass http: //localhost :8080;
      }

   }
}

使用 proxy_pass 指令即可将匹配的请求转发到相应的代理服务器。这里我们同时配置了两个 location,第一个 location 来截获静态文件请求并将请求直接交给 nginx 处理,第二个 location 来截获除了静态文件之外的其他所有请求并将这些请求交给 tomcat 处理。这是 nginx 非常经典的使用方式。

② 正向代理是通常所说的代理,是某台电脑通过一台服务器来上Internet网的这种方式,,其中这台电脑叫客户机,这台服务器叫正向代理服务器,也是通常所说的代理服务器。一般情况下,客户机必须制定代理服务器(IE浏览器可在工具→Internet选项→连接→局域网设置→代理服务器中设置)。

 2.1 Nginx正向代理配置文件

user www;
worker_processes 1;
error_log /var/log/nginx/error.log debug;

events {
	use epoll;
	worker_connections 1024;
}

http {
	resolver 8.8.8.8;
	server {
		listen 8088;
		location / {
			proxy_pass http://$http_host$request_uri;
		}
	}
}


以上配置的注意事项:

设置nginx代理服务,一般是配置到一个server块中。注意,在该server块中,不要出现server_name指令,即不要设置虚拟主机的名称和IP。而resolver是必需的,如果没有该指令,nginx无法处理接收到的域名。其次,nginx代理服务不支持正向代理HTTPS站点。
1,不能有hostname。
2,必须有resolver, 即dns,即上面的x.x.x.x,换成当前机器的DNS服务器ip即可(查看dns方法 cat /etc/resolv.conf 代理使用)
3,$http_host和$request_uri是nginx系统变量,保持原样即可。


2.2 配置完成后,重启Nginx使配置生效。然后,你可以在IE浏览器菜单中的“工具”→“Interner选项”→“连接”→“局域网设置”→“代理服务器”

中设置代理服务器IP地址和端口,如图11-6所示。

Nginx 教程二:利用nginx搭建静态文件服务、正向代理服务器、反向代理服务器_第1张图片


使用Nginx提供反向代理服务器

利用nginx把请求转发到真正的远程后台服务器上,然后后台服务器返回数据给nginx,nginx收到数据后再返回给我们页面。这种技术一般成为请求转发或者叫反向代理。下面放出一张nginx的配置图

Nginx 教程二:利用nginx搭建静态文件服务、正向代理服务器、反向代理服务器_第2张图片

配置很简单这里大概给大家讲一下重点部分,

1、location 支持配置项目的绝对路径

2、假设我们的后台API地址是以API开头,location ^~ /api/ 代表nginx将会拦截请求地址中包含"/api/"字样的请求,其实这就是我们的ajax请求路径,拦截到请求之后根据写法会分成两种情况把这个请求转发到 下面 proxy_pass 的地址上。

  举个例子:

a、如上图,如果proxy_pass 的URL以 / 结尾 ,那么请求转发的时候 将 不会 带上 匹配到的 /api/ ,也就是说如果 登录请求 URL是 localhost:60001/api/user/login,proxy_pass  URL 是 http://a.xx.com:8080/platform/, Nginx将会 把这个请求转发成 http://a.xx.com:8080/platform/user/login 

b、如果proxy_pass 的URL不以 / 结尾 ,那么请求转发的时候 将 会带上 匹配到的 /api/ ,也就是说如果 登录请求 URL是 localhost:60001/api/user/login,proxy_pass  URL 是 http://a.xx.com:8080/platform/, Nginx将会 把这个请求转发成 http://a.xx.com:8080/platform/api/user/login 

3、一般我们登录之后服务器会通过Set-Cookie把token写回到我们本地,如果不设置 proxy_cookie_path 的话,服务器Set-Cookie命令会失效,本地存不了cookie,从而导致token丢失。

这里proxy_cookie_path有一点需要注意的是 如果 proxy_pass  URL 是 http://a.xx.com:8080/platform/ 这种情况  proxy_cookie_path应该设置成 /platform/ / (注意两个斜杠之间有空格)。

如果 proxy_pass  URL 是 http://a.xx.com:8080/这种情况  proxy_cookie_path应该设置成 / / (注意两个斜杠之间有空格)

重启下nginx,你就会发现一切都正常了。


原文地址:

静态资源服务器:http://www.cnblogs.com/1995hxt/p/6100202.html

location配置的解释: http://www.cnblogs.com/lidabo/p/4169396.html

反向代理:http://blog.csdn.net/cjd6568358/article/details/51871039

3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
user www ;
worker _processes 1 ;
error_log / var / log / nginx / error . log debug ;
 
events {
use epoll ;
worker _connections 1024 ;
}
 
http {
resolver 8.8.8.8 ;
server {
listen 8088 ;
location / {
proxy_pass http : //$http_host$request_uri;
}
}
}

你可能感兴趣的:(nginx)