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 为代理服务器也很简单,同样在 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,nginx收到数据后再返回给我们页面。这种技术一般成为请求转发或者叫反向代理。下面放出一张nginx的配置图
配置很简单这里大概给大家讲一下重点部分,
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;
}
}
}
|