nginx配置、反向代理缓存、负载均衡

一、nginx基本配置
nginx开启文件目录浏览功能(web上显示目录)

1location / {
2 root /data/www/file //指定实际目录绝对路径;
3 autoindex on; //开启目录浏览功能;
4 autoindex_exact_size off; //关闭详细文件大小统计,让文件大小显示MB,GB单位,默认为b;
5 autoindex_localtime on; //开启以服务器本地时区显示文件修改日期!
6}
php-fpm配置

1 location ~ .php(.*)$ {
2 fastcgi_pass 127.0.0.1:9000;
3 fastcgi_read_timeout 7200;
4 fastcgi_index index.php;
5 fastcgi_split_path_info ^((?U).+.php)(/?.+)$;
6 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
7 fastcgi_param PATH_INFO $fastcgi_path_info;
8 fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
9 include fastcgi_params;
10 }
静态资源读取

1 location ~ .*.(js|css|ico|png|jpg|eot|svg|ttf|woff) {
2 #所有静态文件直接读取硬盘
3 root /var/lib/tomcat7/webapps/JieLiERP/WEB-INF ;
4 expires 30d; #缓存30天
5 }
gzip 压缩

1gzip on; #是否开启gzip
2gzip_buffers 32 4k; #内存中缓冲几块
3gzip_min_length 1000; #最小压缩长度
4gzip_comp_level 6; #压缩级别[1-9](级别越高压缩的越小,但是越浪费cpu)
5gzip_disable; #正则匹配UA什么样的uri不进行压缩
6gzip_http_version 1.1|2.0; 开始压缩htpp协议版本
7gzip_proxied #设置请求者代理服务器,该如何缓存内容
8gzip_types text/plain application/xml; #对哪些类型的文件用压缩(图片,mp3这类2进制文件压缩率不高没必要压缩)
9gzip_vary on|off #是否传输压缩标志
二、nginx配置https
1.激活所需要的网站的https获取crt和key证书
2.在nginx配置文件中配置https证书

将http访问域名重定向为https安全访问
1server {
2 listen 80;
3 server_name www.shangbee.com shangbee.com;
4 #重定向shangbee.com到 www.shangbee.com
5 # if ( $host != ‘www.shangbee.com‘ ) {
6 # rewrite ^/(.)$ https://www.shangbee.com permanent;
7 # }
8 rewrite ^ https://$http_host$request_uri? permanent;#强制将HTTP重定向到HTTPS permanent永久重定向
9
10}
1server {
2 listen 443 ssl;
3 ssl_certificate /etc/nginx/ssl/nginx.crt;
4 ssl_certificate_key /etc/nginx/ssl/nginx.key;
5 keepalive_timeout 70;
6 server_name www.shangbee.com;
7 server_tokens off;
8 #add_header Strict-Transport-Security "max-age=31536000; includeSubdomains";
9 fastcgi_param HTTPS on;
10 fastcgi_param HTTP_SCHEME https;
11 #access_log /app/logs/nginx/mydomain_access.log;
12 #error_log /app/logs/nginx/mydomain_error.log;
13 set $root /data/htdocs/ether/public;
14 location ~ .
.(gif|jpg|jpeg|bmp|png|ico|txt|js|css)$
15 {
16 root $root;
17 }
18 location / {
19 root $root;
20 index index.html index.php;
21 if ( -f $request_filename) {
22 break;
23 }
24 if ( !-e $request_filename) {
25 rewrite ^(.*)$ /index.php/$1 last;
26 break;
27 }
28 }
29 location ~ .+.php($|/) {
30 fastcgi_pass unix:/run/php/php7.0-fpm.sock;
31 fastcgi_split_path_info ^((?U).+.php)(/?.+)$;
32 fastcgi_param PATH_INFO $fastcgi_path_info;
33 fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
34 fastcgi_param SCRIPT_FILENAME $root$fastcgi_script_name;
35 include fastcgi_params;
36 }
37}
永久重定向与临时重定向的区别
临时重定向redirect,永久重定向permanent
301重定向是永久的重定向,搜索引擎在抓取新内容的同时也将旧的网址替换为重定向之后的网址。

302跳转是暂时的跳转,搜索引擎会抓取新的内容而保留旧的网址。因为服务器返回302代码,搜索引擎认为新的网址只是暂时的。

实施301后,新网址完全继承旧网址,旧网址的排名等完全清零。

实施302后,对旧网址没有影响,但新网址不会有排名。

302每次用户请求都会访问一次服务器,并返回给用户,301用户请求后将永久重定向缓存,再次请求直接在本地重定向不会经过服务器。

三、负载均衡与反向代理
反向代理是负载均衡的一种方式

反向代理可以实现负载均衡 但是负载均衡不一定通过反向代理的方式来实现

反向代理也可以不做负载均衡 可以做客户端与web服务器之间的缓存服务器

squid varnish这些反向代理一般做缓存

nginx反向代理一般做负载均衡

负载均衡也可以通过LVS非反向代理的方式来实现 通过ip和端口实现负载均衡

NGINX反向代理缓存

反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。
反向代理的作用

①保护网站安全:任何来自Internet的请求都必须先经过代理服务器。
简单来说,就是我们网站的所有的请求都要经过反向代理服务器,对反向代理服务器进行安全加固就能解决很大一部分的安全问题。

②通过配置缓存功能加速Web请求:可以缓存真实Web服务器上的某些静态资源,减轻真实Web服务器的负载压力;

可以在反向代理的服务器上缓存某些静态资源,这样的话在反向代理服务器上存在的资源就不用去web服务器上获取,以减轻web服务器的压力。

③实现负载均衡:充当负载均衡服务器均衡地分发请求,平衡集群中各个服务器的负载压力;

可以通过反向代理服务器把请求分发到不同服务器,减轻服务器的压力,还能防止网站某一台服务器挂掉之后,网站就无法访问的问题,做到网站的高可用,减少事故的发生。

反向代理缓存设置

一、在反向代理服务器的配置文件中加入:

位置:

http段内

1proxy_temp_path /data/nginx-temp; #缓存临时文件路径
2proxy_cache_path /data/nginx-cache levels=1:2 keys_zone=nginx-cache:20m
3max_size=50m inactive=1m; #缓存保存的路径
levels指定该缓存空间有两层hash目录,第一层目录为1个数字或者字母,第二层为2个数字或者字母

keys_zone指的是缓存空间名称。 20m 为内存缓存空间大小

max_size指的是缓存文件可以占用的最大空间。

inactive指的是如果一个缓存文件多长时间不被访问,就会被删除。(天:d、秒:s、分:m)

?配置的demo

//设置动态服务器的代理 【处理PHP任务】

1upstream test {
2 #ip_hash; #[ 使用ip_hash分发 ]
3 server 192.168.1.254:81 weight=2 ; #[ 设置这个服务器的权重为2 ]
4 server 192.168.1.254:82;
5}
//设置获取静态文件的代理

1upstream static{
2 server 192.168.1.254:81 ; #[ 静态服务器 ]
3}
设置缓存目录

1proxy_temp_path /data/nginx-temp; #[temp的目录]
2proxy_cache_path /data/nginx-cache levels=1:2 keys_zone=nginx-cache:20m max_size=50m inactive=1m;
[ 设置缓存的路径为 /data/nginx-cache 层级为2级,第一级为1个字幕第二个为2个字母 缓存的空间名为 nginx-cache,缓存的内存空间为20M 最大空间为50M 1分钟内没有访问删除这个缓存 ]

END

1server {
2 listen 80;
3 servername ;
4 access_log logs/likang.default.access.log main;
5 error_log logs/error.log error;
6 root /var/www/html/likang/default;
设置反向代理

1location /{
2 proxy_pass http://test;
3 proxy_set_header Host $host;
4 proxy_set_header X-Real-IP $remote_addr;
5 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
6 }
设置静态图片

1location ~..(gif|jpg|png|htm|html|css|js|flv|ico|swf)(.) {
2 #root /data/nginx-cache; #[ 图片的根目录 ]
3 proxy_redirect off; #[关闭跳转]
4 proxy_set_header Host $host; #[ 设置header ]
5 proxy_cache nginx-cache; #[ 缓存的空间 -- 上边定义的 ]
6 proxy_cache_valid 200 302 1h; #[ 不同http状态缓存时间不同 ]
7 proxy_cache_valid 301 1d;
8 proxy_cache_valid any 1m;
9 proxy_ignore_headers Set-Cookie Cache-Control;
10 proxy_hide_header Cache-Control;
11 proxy_hide_header Set-Cookie;
12 expires 30d; #[告诉浏览器缓存有效期 -- 30天内可以直接访问浏览器缓存 ]
13 proxy_pass http://static; #[文件不存在去那里获取]
14 }
15}
解决不缓存的问题:

nginx不缓存原因

默认情况下,nginx是否缓存是由nginx缓存服务器与源服务器共同决定的, 缓存服务器需要严格遵守源服务器响应的header来决定是否缓存以及缓存的时常。header主要有如下:

Cache-control:no-cache、no-store

如果出现这两值,nginx缓存服务器是绝对不会缓存的

Expires:1980-01-01

如果出现日期比当前时间早,也不会缓存。

解决不缓存方案

2.1 方法一:

修改程序或者源服务器web程序响应的header

2.2 方法二:

nginx代理直接加上如下一句:

1proxy_ignore_headers X-Accel-Expires Expires Cache-Control Set-Cookie;
或者:

1proxy_ignore_headers Set-Cookie Cache-Control;
2proxy_hide_header Cache-Control;
3proxy_hide_header Set-Cookie;
扩展:学习nginx的Proxy Cache指令

1 proxy_cache

语法:proxy_cache zone_name;

默认值:None

使用字段:http, server, location

设置一个缓存区域的名称,一个相同的区域可以在不同的地方使用。
在0.7.48后,缓存遵循后端的”Expires”, “Cache-Control: no-cache”, “Cache-Control: max-age=XXX”以及其他等。然而,目前nginx会忽略一些缓存控制指令,如:”private”和”no-store”,同样,nginx在缓存过程中不会处理”Vary”头,为了确保一些私有数据不被所有的用户看到,后端必须设置 “no-cache”或者”max-age=0″头,或者proxy_cache_key包含用户指定的数据如

2 proxy_cache_key

语法:proxy_cache_key line;

默认值:httpcookiexxx,在proxycachekey中使用一部分cookie的值可以防止缓存私有数据,所以可以分别指定location以便分开私有数据和公有数据。缓存指令依赖代理缓冲区(buffers),如果proxybuffers设置为off,缓存不会生效。¨K40K语法:¨C2C默认值:schemeproxy ostrequest_uri;

使用字段:http, server, location

指令指定了包含在缓存中的缓存关键字。

复制代码 代码如下:

1proxy_cache_key "$host$request_uri$cookie_user";
2
3proxy_cache_key "$scheme$host$request_uri";
3 proxy_cache_path

语法:proxy_cache_path path [levels=number] keys_zone=zone_name:zone_size [inactive=time] [max_size=size];

默认值:None

使用字段:http

指令指定缓存的路径和一些其他参数,缓存的数据存储在文件中。缓存的文件名和key为代理URL的MD5 码。levels参数指定缓存的子目录数,例如:
proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=one:10m;

文件名类似于:
/data/nginx/cache/c/29/b7f54b2df7773722d382f4809d65029c
所有活动的key和元数据存储在共享的内存区域中,这个区域用keys_zone参数指定,如果在inactive参数指定的时间内缓存的数据没有被请求则被删除,默认inactive为10分钟。

cache manager进程控制磁盘的缓存大小,在max_size参数中定义,超过其大小后最少使用数据将被删除。

区域的大小按照缓存页面数的比例进行设置,一个页面(文件)的元数据大小按照操作系统来定,FreeBSD/i386下为64字节,FreeBSD/amd64下为128字节,当区域满了以后key将按照LRU(最近最少使用算法)进行处理。

proxy_cache_path和proxy_temp_path应该使用在相同的文件系统上。

4 proxy_cache_methods

语法:proxy_cache_methods [GET HEAD POST];

默认值:proxy_cache_methods GET HEAD;

使用字段:http, server, location

GET/HEAD用来装饰语句,即你无法禁用GET/HEAD即使你只使用下列语句设置:

proxy_cache_methods POST;

5 proxy_cache_min_uses

语法:proxy_cache_min_uses the_number;

默认值:proxy_cache_min_uses 1;

使用字段:http, server, location

多少次的查询后应答将被缓存,默认1。

6 proxy_cache_valid

语法:proxy_cache_valid reply_code [reply_code ...] time;

默认值:None

使用字段:http, server, location

为不同的应答设置不同的缓存时间,例如:

复制代码 代码如下:

1 proxy_cache_valid 200 302 10m;
2 proxy_cache_valid 404 1m;
3 proxy_cache_valid 5m;
4 proxy_cache_valid 200 302 10m;
5 proxy_cache_valid 301 1h;
6 proxy_cache_valid any 1m;
7 proxy_cache_use_stale

为了防止缓存失效(在多个线程同时更新本地缓存时),你可以指定’updating’参数,它将保证只有一个线程去更新缓存,并且在这个线程更新缓存的过程中其他的线程只会响应当前缓存中的过期版本。

代码及configure配置:

在ngx_http_proxy_module.c里面定义了每个指令的钩子(即callback),它们在读取配置文件时会被调用。在configure的时候只需要把“HTTP_CACHE”设置为YES(可以找到auto/options里面HTTP_CACHE那行)。“proxy_cache_purge”指令需要下载nginx add-ons里面的“Cache Purge”模块,并在configure的时候用"--add-module="来加载代码。

原文地址:http://blog.51cto.com/14028890/2327306

时间: 2024-08-25 00:53:00

nginx配置、反向代理缓存、负载均衡的相关文章

nginx配置反向代理和负载均衡

一.反向代理 说明:应该有一个nginx服务器有多个应用服务器(可以是tomcat),本文使用一台虚拟机,安装一个nginx,多个tomcat,来模拟 upstream tomcats{ server 192.168.25.148:8080; server 192.168.25.148:8081; } server { listen 80; server_name tomcat.taotao.com; #charset koi8-r; #access_log logs/host.access.l

Nginx 配置反向代理和负载均衡

反向代理 客户端 A 出于某种原因(如 GFW)无法访问服务器 B,但它能访问服务器 C,服务器 C 能访问服务器 A,那么客户端 A 可通过服务器 C 来访问服务器 B.此时服务器 C 就是一个代理服务器(即正向代理). 首先将请求发送到服务器 C,服务器 C 将请求转发到服务器 B 并接收服务器 B 返回的响应,最后将响应返回给客户端 A. 客户端 A 请求某项服务器 B 上没有的资源,但服务器 C 上有此资源,服务器 B 请求服务器 C 上的资源,并将它返回给客户端 A.此时服务器 B 即

nginx简单反向代理和负载均衡(ubuntu)

nginx简单反向代理与负载均衡 环境:三台ubuntu 12.04.5 虚拟机    均装有nginx 1.1.19 以下u1(192.168.240.129) ,u2(192.168.240.130),u3(192.168.240.131)代表三台虚拟机 简单的反向代理配置:(u1反向到u2) u1的配置: server { listen 80 default_server; server_name  a.jh.net; index index.html index.php root /ho

实践NGINX的反向代理与负载均衡

实践NGINX的反向代理与负载均衡 安装nginx过程 [[email protected] opt]# yum install pcre-devel openssl-devel -y [[email protected] opt]# wget -q http://nginx.org/download/nginx-1.10.2.tar.gz [[email protected] opt]# useradd nginx -s /sbin/nologin -M [[email protected]

Tomcat:利用Apache配置反向代理、负载均衡

Apache 反向代理.负载均衡 准备工作 1.  2 个tomcat实例 2.  安装Apache server2.2 基于apache server配置反向代理 在这个配置中,只使用到了apache server,没有使用到tomcat. 1)  ${apacheserver}/conf/extra/httpd-vhosts.conf在配置一个使用反向代理的虚拟主机 <VirtualHost *:80> ServerAdmin [email protected] ServerName ww

Apache上配置反向代理以及负载均衡配置

之前一个项目需要在Apache上配置负载均衡,由于事情繁多,时间紧迫,没有时间去弄. 今天抽时间测试了一把,至少是可以进行代理了. 现将如何配置反向代理和负载均衡分别描述. 1.反向代理 步骤: (1)在Apache的配置文件httpd.conf中打开反向代理的模块 #----------------------------------------------- LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_conne

nginx实现反向代理与负载均衡

nginx在LB Cluster集群中也可以扮演一定的角色,即反向代理与负载均衡.在一个Web服务中,来自客户端的请求可以经由nginx服务器转发至后端服务器,并且按照一定的算法实现负载均衡. 1.反向代理 1)在192.168.10.17/24与192.168.10.77/24主机上安装nginx,提供web服务. 编辑两台主机的主页文件内容分别为 inode17 page 和inode77 page 2)主机172.16.10.66提供nginx的反向代理服务 为了与后端主机进行通信,此主机

nginx 作为反向代理实现负载均衡的例子

nginx 这个轻量级.高性能的 web server 主要可以干两件事情: 〉直接作为http server(代替apache,对PHP需要FastCGI处理器支持): 〉另外一个功能就是作为反向代理服务器实现负载均衡 以下我们就来举例说明如何使用 nginx 实现负载均衡.因为nginx在处理并发方面的优势,现在这个应用非常常见.当然了Apache的 mod_proxy和mod_cache结合使用也可以实现对多台app server的反向代理和负载均衡,但是在并发处理方面apache还是没有

nginx实现反向代理、负载均衡-技术流ken

1.简介 本篇博文是<nginx实现动态/静态文件缓存-技术流ken>的二部曲.将详细介绍nginx如何实现反向代理以及负载均衡技术,并辅以实战案例. 反向代理--"反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器." 负载均衡--"网络专用术语,负载均衡建立在现有网络结构之

Nginx的反向代理及负载均衡

1.集群的简介 简单来说,集群就是指一组相互独立的计算机,利用高速通信网络组成的一个较大的计算机服务系统,每个集群节点都是运行各自服务的独立服务器.这些服务器之间可以彼此通信,协同向用户提供应用程序.系统资源和数据,并以单一系统的模式加以管理.当用户客户机请求集群系统时,集群给用户的感觉就是一个单一的服务器,而实际上用户请求的是一组集群服务器. 集群主要包括几大特点:高性能.价格有效性.可伸缩性.高可用性.透明性.可管理性和可编程性. 2.负载均衡集群 常见的负载均衡的架构包括有负载均衡集群.高