nginx常用配置
一、Nginx配置虚拟主机
1.简介
在nginx中,一个server字段,就是一个虚拟机主机。
可以端口一样,域名不一样。域名一样,端口不一样。
2.添加
nginx主配置文件默认会加载conf.d目录下的配置,include /usr/locale/nginx/conf.d/*.conf;
一般虚拟主机在这里添加一个xx.conf,xx一般为端口或者域名,好识别
如下添加一个端口为80,域名为ftp.baidu.com的虚拟主机vim conf.d/ftp.conf
server {
listen 80;
server_name ftp.baidu.com;
index index.html;
root html;
access_log /tmp/ftp.log main; #一般讲日志单独出来,好区分哪个域名的问题
error_log /tmp/ftp_error.log;
}
#如果开启了php,需要单独在这块添加php的location
二、Nginx开启用户认证
1.简介
场景:
如果有某些需要放置在外面,谁都可以访问,但只让某些人可以看到,就可以设置一个账号密码。通常用于Nginx做FTP,需要验证才能访问。
过程:
使用htpasswd命令创建账户文件,手写的密码是不行的。
2.操作
安装依赖yum -y install httpd-tools
创建密码文件htpasswd -cm /usr/local/nginx/pass tom
追加用户,不使用-c选项htpasswd -m /usr/local/nginx/pass jerry
http,server,location字段均可添加
server {
listen 80;
server_name localhost;
auth_basic "Input Password:"; #认证提示符
auth_basic_user_file "/usr/local/nginx/pass"; #认证密码文件
location / {
root html;
index index.html index.htm;
}
}
三、Nginx开启PHP
1.简介
场景:
Nginx本身只能解析html文件,但有些网页是php写的,就需要Nginx连接php,将网页解析成html再发给客户端。
配置中将.php 结尾的请求通过 FashCGI 交给 PHP-FPM 处理,PHP-FPM
是 PHP 的一个 FastCGI 管理器。
2.配置
在server字段中添加一个location字段
location ~ \.php$ { #匹配php文件,只有php文件才放到这里解析
root html/bbs; #php页面地址
#nginx 将会连接回环地址 9000 端口执行 PHP 文件,需要使用 tcp/ip 协议,速度比较慢.建议大家换成使用 socket 方式连接。将 fastcgi_pass 127.0.0.1:9000;改成 fastcgi_pass unix:/var/run/phpfpm.sock;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
#/usr/local/xxx是php文件所在的目录,虽然root那行指定了目录,但通常不靠谱
fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html$fastcgi_script_name;
include fastcgi_params;
}
3.参数
以下均添加到location所在字段
#第一行代码是为FastCGI缓存指定一个文件路径、目录结构等级、关键字区域存储时间和非活动删除时间。
fastcgi_cache_path /usr/local/nginx/fastcgi_cache levels=1:2 keys_zone=TEST:10m inactive=5m;
#指定连接到后端FastCGI的超时时间,默认60秒
fastcgi_connect_timeout 30;
#指定向FastCGI传送请求的超时时间,规定时间内后端服务器必须传输完所有数据
fastcgi_send_timeout 30;
#指定接收FastCGI应答的超时时间,如果php-fpm迟迟不发送,将超时
fastcgi_read_timeout 30;
#用于指定读取nginx的FastCGI去响应php-fpm的响应头要多大的容量
fastcgi_buffer_size 64k;
#指定本地需要用多少和多大的缓冲区来缓冲FastCGI的应答请求。如果一个PHP脚本所产生的页面大小为256KB,那么会为其分配4个64KB的缓冲区来缓存;如果页面大小大于256KB,那么大于256KB的部分会缓存到fastcgi_temp指定的路径中,但是这并不是好方法,因为内存中的数据处理速度要快于硬盘。一般这个值应该为站点中PHP脚本所产生的页面大小的中间值,如果站点大部分脚本所产生的页面大小为256KB,那么可以把这个值设置为“16 16k”、“4 64k”等。
fastcgi_buffers 4 64k;
#用于系统很忙是使用的大小,的默认值是fastcgi_buffers的两倍。
fastcgi_busy_buffers_size 128k;
#表示在写入缓存文件时使用多大的数据块,默认值是fastcgi_buffers的两倍
fastcgi_temp_file_write_size 128k;
#表示开启FastCGI缓存并为其指定一个名称。开启缓存非常有用,可以有效降低CPU的负载,并且防止502错误的发生,但是开启缓存也会引起很多问题,要视具体情况而定。
fastcgi_cache TEST;
#fastcgi用来指定应答代码的缓存时间,实例中的值表示将200和302应答缓存一个小时,将301应答缓存1天,其他应答均缓存1分钟。
fastcgi_cache_valid 200 302 1h;
fastcgi_cache_valid 301 1d;
fastcgi_cache_valid any 1m;
四、开启PHP_INFO
1.简介
pathinfo是php需要的东西,php可以用这个函数来获得信息。
http://wangying.sinaapp.com/tools/index.php/login/index
这个访问,Apache都接受, 都会认为是对index.php的访问, 并会设置PATH_INFO为/login/index
print_r($_SERVER[“PATH_INFO”]);//login/index
php程序或者页面,就可以根据这个信息来做一些操作,或者处理东西。但默认Nginx是不开启的。
2.配置
对于形如tools/index.php/login/index 这样的文件路径, Nginx正则匹配为路径而不是php文件. 所以我们需要去掉($)
1.使用php内部解析,将Nginx获取的变量直接传给后面的php页面。
location ~ .php { #去掉了最后的$
fastcgi_index index.php;
fastcgi_pass 127.0.0.1:9000;
include fastcgi_params;
fastcgi_param PATH_INFO $fastcgi_script_name;
}
2.使用nginx正则解析,手动用if命令将访问路径解析,然后作为PATH_INFO传递给php页面。
Nginx默认获取不到PATH_INFO的值,得通过fastcgi_split_path_info指定定义的正则表达式来给$fastcgi_path_info赋值。
#配置方案 使用nginx模块fastcgi_split_path_info(nginx版本>0.7.31)
location ~ \.php {
fastcgi_index index.php;
fastcgi_pass 127.0.0.1:9000;
include fastcgi_params;
set $real_script_name $fastcgi_script_name;
if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") {
set $real_script_name $1;
set $path_info $2;
}
fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;
fastcgi_param SCRIPT_NAME $real_script_name;
fastcgi_param PATH_INFO $path_info;
}
3.参数
#不推荐,这是正则后的值传递给path_info,会不安全
fastcgi_split_path_info ^(.+\.php)(/.+)$;
#通过paht_info变量传递
fastcgi_param PATH_INFO $fastcgi_path_info;
#传递,当前不清楚有何区别
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
#传递,当前不清楚有何区别
#fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
五、Nginx重定向
1.简介
据相关变量重定向和选择不同的配置,从一个 location 跳转到另一个 location,不过这样的循环最多可以执行10 次,超过后 nginx 将返回 500 错误。同时,重写模块包含 set 指令,来创建新的变量并设其值,这在有些情景下非常有用的,如记录条件标识、传递参数到其他 location、记录做了什么等等。
rewrite指令的第一个参数是一个正则,用于匹配那些需要重写的URI,第二个参数用于替换匹配到的URI,第三个参数是一个标记,表示后面是否还进行重写,或者重定向。
2.配置
1.访问a页面重定向到b页面
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
rewrite /a.html /b.html;
}
}
2.访问当前nginx,重定向到其他网址
server {
listen 80;
server_name localhost;
rewrite ^/ http://www.tmooc.cn/;
location / {
root html;
index index.html index.htm;
}
}
六、Nginx正向代理
1.简介
场景:
用于内网机器访问外网,就需要正向代理,类似VPN。
原理:
A机器可以访问外网,而B,C,D机器只能内网,便可以设立正向代理,将B,C,D机器的访问请求发给A,A机器访问外网后再将获得的信息再转发给B,C,D。
2.配置
server {
listen 8090;
location / {
resolver 218.85.157.99 218.85.152.99;
resolver_timeout 30s;
proxy_pass http://$host$request_uri;
}
access_log /data/httplogs/proxy-$host-aceess.log;
}
3.参数
resolver后面填写dns地址,可以多个,将以轮询方式请求。
resolver_timeout 解析超时时间。
七、Nginx反向代理
1.简介
场景:
当后端服务器不直接面对客户,就需要代理了。这样的好处是代理可以进行缓存,加速访问,或者对访问进行负载均衡,做各种策略。
原理:
访问时 浏览器–反向代理–后端服务器,返回时 后端服务器–反向代理–浏览器
2.配置
1.反向代理
server {
listen 80;
server_name localhost;
charset utf-8;
location / {
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for ;
proxy_set_header Accept-Encoding "";
# 应用服务器 HTTP 地址
proxy_pass http://192.168.0.112:8080;
}
}
2.反向代理websocket
关于什么是websocket在知识普及版块有说明
在这里,我们看到客户端和服务器能够通过作为代理的NGINX进行通信,并且消息可以继续来回发送,直到客户端或服务器断开连接。
让NGINX正确处理WebSocket所需要的是正确设置头文件来处理将连接从HTTP升级到WebSocket的升级请求。
upstream websocket {
server 192.168.100.10:8010; #后端WebSocket程序
}
server {
listen 8010; #端口一般是对等的
server_name xx;
location / {
proxy_pass http://websocket;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade; #升级http协议
proxy_set_header Connection $connection_upgrade;
}
}
3.负载均衡
当后端服务器不够用时,将使用负载均衡技术,将请求分发
#1.配置负载池子
upstream myapp {
server 192.168.0.111:8080; # 应用服务器 1
server 192.168.0.112:8080 bak; # 应用服务器 2,表示只有其他机器都繁忙或者坏掉,才用这台
server 192.168.0.113:8080 down #表示暂不参与
}
#2.调用池子
server {
listen 80;
server_name xx;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://myapp; #池子名
}
}
轮询策略
权重轮询
#指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
upstream backserver {
server 192.168.0.14 weight=10;
server 192.168.0.15 weight=10;
}
ip_hash
#每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
upstream backserver {
ip_hash;
server 192.168.0.14:88;
server 192.168.0.15:80;
}
fair(第三方)
#按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream backserver {
server server1;
server server2;
fair;
}
url_hash(第三方)
#按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
upstream backserver {
server squid1:3128;
server squid2:3128;
hash $request_uri;
hash_method crc32;
}
3.参数
#请求头为空的字段,将不传递给后端服务器。
proxy_set_header Accept-Encoding "";
#将端口,访问ip等传递给后端服务器。否则后端将只能看到nginx的访问。
proxy_set_header Host $host:$server_port;
#只传一层客户端的值,如果前面有代理,相当于2层代理,就只传代理的ip了。
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Real-PORT $remote_port;
#如果前面还有代理,nginx1-nginx2-php程序,那nginx2这层将给php程序nginx1的地址还有客户端的地址
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#关闭缓存,将加快交互
proxy_buffering off;
#指定哪个网卡链接后端服务器
proxy_bind 127.0.0.2;
#存放http报文头的哈希表容量上限,默认为512个字符
proxy_headers_hash_max_size 1024;
#设置头部哈希表大小 默认为64
proxy_headers_hash_bucket_size 128;
# 应用服务器 HTTP 地址
proxy_pass http://192.168.0.112:8080;
#缓冲区代理缓冲用户端请求的最大字节数,可以理解为保存到本地再传给用户
client_body_buffer_size 512k;
#nginx 跟后端服务器连接超时时间(代理连接超时)
proxy_connect_timeout 5;
#这个指定设置了发送请求给upstream服务器的超时时间。超时设置不是为了整个发送期间,而是在两次write操作期间。如果超时后,upstream没有收到新的数据,nginx会关闭连接
proxy_send_timeout 60;
#该指令设置与代理服务器的读超时时间。它决定了nginx会等待多长时间来获得请求的响应。这个时间不是获得整个response的时间,而是两次reading操作的时间。
proxy_read_timeout 10;
#设置代理服务器(nginx)保存用户头信息的缓冲区大小
proxy_buffer_size 16k;
#proxy_buffers 缓冲区,网页平均在 64k 以下的话,这样设置
proxy_buffers 4 64k;
#高负荷下缓冲大小(proxy_buffers*2)
proxy_busy_buffers_size 128k;
#设定缓存文件夹大小,大于这个值,将从 upstream 服务器传递请求,而不缓冲到磁盘
proxy_temp_file_write_size 128k;
#不允许代理端主动关闭连接
proxy_ignore_client_abort on;
#未知
proxy_redirect off;
八、Nginx配置HTTPS
1.简介
场景:
用于安全加密,让通信更安全
原理:
在http协议上加了一个加密层,所以信息加密后才发送,到服务器用公钥解密。
2.配置
1.生成证书
1.安装依赖yum -y isntall openssl
2.生成cd /usr/local/nginx/conf
openssl genrsa -out cert.key
#生成私钥openssl req -new -x509 -key cert.key -out cert.pem
#生成证书
2.单独配置https
server {
listen 443 ssl http2; #使用HTTP/2,需要Nginx1.9.7以上版本
charset utf-8;
server_name www.xx.com;
ssl_certificate /root/cert.pen; #证书
ssl_certificate_key /root/cert.key;私钥
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # SSL(包括 v3)都有漏洞,应该用 TLS(TLS1.0 = SSL 3.1)
ssl_ciphers HIGH:!aNULL:!MD5; #加密方法
ssl_session_tickets on; #开启浏览器的Session Ticket缓存
ssl_session_timeout 10m; #SSL session过期时间
ssl_stapling on; #OCSP Stapling开启,OCSP是用于在线查询证书吊销情况的服务,使用OCSP Stapling能将证书有效状态的信息缓存到服务器,提高TLS握手速度
ssl_stapling_verify on; #OCSP Stapling验证开启
add_header Strict-Transport-Security "max-age=31536000"; #开启HSTS,并设置有效期为“6307200秒”(6个月),包括子域名(根据情况可删掉),预加载到浏览器缓存(根据情况可删掉)
access_log /tmp/access.log; #日志
location / {
root /xxxx;
index index.html index.htm;
}
}
3.配置访问http将转到https
server {
listen 80;
listen 443 ssl;
server_name www.xx,com;
ssl_certificate /root/cert.pen;
ssl_certificate_key /root/cert.key;
ssl_session_tickets on;
ssl_session_timeout 10m;
ssl_stapling on;
ssl_stapling_verify on;
add_header Strict-Transport-Security "max-age=31536000";
if ($scheme != https) { #http请求转到https
rewrite ^(.*)$ https://$host$1 permanent;
}
location / {
root /xxxx;
index index.html index.htm;
}
九、Nginx缓存
1.简介
proxy_cache模块用于反向代理,首先定义一个cache配置,后面使用中可以选择使用其中一个cache配置
2.原理
客户端–nginx–后端程序
当客户端访问nginx时,nginx将访问后端程序,获得信息后再返回给客户端
客户端–nginx–nginx_cache–后端程序
现在客户端访问nginx时,nginx先根据url进行hash,看本地cache文件里是否有,有则传给客户端,没有则去后端程序获取。
默认情况下,NGINX需要考虑从原始服务器得到的Cache-Control标头。当在响应头部中Cache-Control被配置为Private,No-Cache,No-Store或者Set-Cookie,NGINX不进行缓存。NGINX仅仅缓存GET和HEAD客户端请求。你也可以参照下面的解答覆盖这些默认值。
Cache-Control是http网页缓存,当服务器发送给浏览器的http中含有public,则浏览器呈现来自缓存的页面。private则浏览器重新发送请求到服务器。
3.配置
proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m
use_temp_path=off;
#path 缓存文件位置
#levels 设置缓存文件目录层次,1:2表示两级目录,将大量的文件放置在单个目录中会导致文件访问缓慢
#keys_zone 设置缓存名字和设置一个共享内存区,该内存区用于存储缓存键和元数据,有些类似计时器的用途。将键的拷贝放入内存可以使NGINX在不检索磁盘的情况下快速决定一个请求是有缓存条目(hit)还是没缓存条目(MISS),这样大大提高了检索速度。一个1MB的内存空间可以存储大约8000个key,那么上面配置的10MB内存空间可以存储差不多80000个key。
#max_size 最大缓存空间,如果缓存空间满,默认覆盖掉缓存时间最长的资源。
#inactive 在指定时间内没人访问则被删除
#use_temp_path 将在缓存这些文件时将它们写入同一个目录下,否则的话将会写到临时区域,再复制到目录下,重复了。
server {
...
location / {
proxy_cache my_cache; #使用上面定义的名字叫my_cache的配置
proxy_cache_revalidate on;
proxy_cache_min_uses 3;
proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
proxy_cache_lock on;
proxy_pass http://127.0.0.1:80;
}
#proxy_cache_revalidate 指示NGINX在刷新来自服务器的内容时使用GET请求。如果客户端的请求项已经被缓存过了,但是在缓存控制头部中定义为过期,那么NGINX就会在GET请求中包含If-Modified-Since字段,发送至服务器端。
# 这项配置可以节约带宽,因为对于NGINX已经缓存过的文件,服务器只会在该文件请求头中Last-Modified记录的时间内被修改时才将全部文件一起发送。
#proxy_cache_min_uses 设置了在NGINX缓存前,客户端请求一个条目的最短时间。当缓存不断被填满时,这项设置便十分有用,因为这确保了只有那些被经常访问的内容才会被添加到缓存中。该项默认值为1。
#proxy_cache_use_stale 当想访问介绍页面时,后端服务器timout或者error 5xx错误,如果有介绍页面的缓存信息,将会推送给客户端,而不是返回error。这样对信息做冗余,返回一个旧数据总比没有好。
#proxy_cache_lock 被启用时,当多个客户端请求一个缓存中不存在的文件(或称之为一个MISS),只有这些请求中的第一个被允许发送至服务器。当获得内容并缓存后,其他请求去访问缓存。如果不启用,则所有没找到缓存的请求都去找服务器,压力会大。
}
4.其它参数
1.忽略Cache-Control头部
location /images/ {
proxy_cache my_cache;
proxy_ignore_headers Cache-Control;
proxy_cache_valid any 30m;
...
}
#NGINX会忽略所有/images/下的Cache-Control头。proxy_cache_valid命令强制规定缓存数据的过期时间,如果忽略Cache-Control头,则该命令是十分必要的。NGINX不会缓存没有过期时间的文件。
2.缓存post请求
默认是缓存来自get的请求,例如浏览器访问百度,大部分就是get请求,登陆账号则是post。
proxy_cache_methods GET HEAD POST;
3.缓存动态内容
可以,提供的Cache-Control头部可以做到。缓存动态内容,甚至短时间内的内容可以减少在原始数据库和服务器中加载,可以提高第一个字节的到达时间,因为页面不需要对每个请求都生成一次。
4.使用Cookie作为缓存键的一部分
proxy_cache_key $proxy_host$request_uri$cookie_jessionid;
5.手动清理缓存
访问 curl http://127.0.0.1/tmp-test/TL39ef7ea6d8e8d48e87a30c43b8f75e30.txt
将清理其中一个缓存。这个缓存文件存在才行。
location /tmp-test/ {
allow 127.0.0.1; //只允许本机访问
deny all; //禁止其他所有ip
proxy_cache_purge tmp-test $uri; //清理缓存
#proxy_cache_purge:缓存清理模块
#tmp-test:指定的key_zone的名字
#$uri:指定的生成key的参数
}
6.支持断点续传
导致range参数无法传递到下一级的原因如下:
当缓存代理转发http请求到后端服务器时,http header会改变,header中的部分参数,会被取消掉。其中range参数被取消,导致,后端nginx服务器没有收到range参数,最终导致这个分片下载不成功。所以需要对代理转发的header进行配置。
将http请求中的range值($http_range)放到代理转发的http请求头中作为参数range的值。
#location字段添加
proxy_cache_key $http_range$uri;
<span style="color:#ff0000;">proxy_set_header Range $http_range;</span>
if ( $http_range = ''){
expires 30d;
}
#proxy_cache_key 默认是将$uri去hash后,作为缓存内容。但range是断点续传,url是一样的,会导致后续的访问还是从$uri缓存后的内容,所以要加一些东西区分一下。
#这样让缓存的东西唯一。
#<span> 将http请求中的range值($http_range)放到代理转发的http请求头中作为参数range的值。
#if那段写的是,当range(断点续传)为空,则让浏览器缓存,否则不缓存。因为断点续传的内容是不一样的,如果缓存了,那下载一个图片用断点续传,将会出现错误,显示的总是第一段。
7.设置查看缓存命中与否
#server字段
add_header Nginx-Cache "$upstream_cache_status";
十、try_file伪静态
1.简介
try_file用于伪静态。
正常的静态文件是一个xx.html文件,他是真实存在于服务器某个文件夹中的。动态网页是从数据库里查询,返回给浏览器的,实际上并没有这个文件,另外路径也很长。
伪静态优点:
缩短URL路径,更美观
URL路径短,容易被SEO收录,搜索排名靠前
隐藏了真实的访问路径,更安全
伪静态缺点:
与原生的url比较在性能上,不如原生的url,简单的说伪静态就是在服务器上又进行了一层url解析,消耗服务器资源。当然了这点消耗与优点相比,我们还是可以接受的。
下面是博客园中的一篇博客,地址是xx.html,让人看起来是一个html文件
这个是微信的一个文章的地址,后面的参数是文章在数据库中的位置,还有一些其它信息
2.配置
server {
listen 80;
server_name xxx.baidu.com;
index index.html index.php;
root /data/html;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
}
}
try_files $uri $uri/ /index.php?$query_string
当访问http://www.baidu.com/3434.html 时,$uri就是3434.html,它会去本地的/data/html下面找3434.html。
如果没找到3434.html,就匹配$uri/,nginx会去/data/html找有没有这个目录。
如果还找不到就会匹配最后一个选项,/index.php?$query_string。发起一个内部 “子请求”,也就是相当于 nginx 发起一个 HTTP 请求http://www.baidu.com/3434.php 这个请求会被后面的location ~ .php$ 来匹配,当php程序解析完后,再返回给浏览器。
而具体的 URI 及参数是在 REQUEST_URI 中传递给 FastCGI 和 PHP 程序的,因此不受 URI 变化的影响。
3.整体流程
你在百度搜索一篇文章,右键复制链接地址,粘贴到笔记上,会发现链接非常的长。
https://www.baidu.com/link.php?wd=&eqid=e307e4f6000029fa000000035b864c15
当点击后,这篇文章所在的服务器,会try_files $uri $uri/ /index.php?$query_string;
,首先匹配是否是xx.html,明显不是,但也不是文件夹,那就交给fastcgi,转而交给php-fpn去操作。
php看到里面写的是去数据库查询一个id号为e307e4f6000029fa000000035b864c15的文章,就将文章提取后发给浏览器,并取名叫3434.html,这个只是显示,并不存在。
4.更多
1.交给反向代理
如果后端不是php而是反向代理则:
location / {
#直接匹配最后面的,不去寻找了
try_files /_not_exists_ @backend;
}
location @backend {
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-Proto $scheme;
#后端程序地址
proxy_pass http://127.0.0.1:8181;
}
2.A机器没有的图片从B机器获得
server {
#访问图片文件,这里做解析
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|css)$ {
root /img; #指定图片所在目录
try_files $uri $uri/ @backend; #当图片不存在,会尝试交给@backend来获取图片
}
location @backend { #反向代理给图片服务器
proxy_pass http://192.168.2.166; #图片服务器可以获取图片
}
}