1.[golang] fasthttp 使ç¨http代ç
2.我在windows上使用squid代理的码修,不能访问动态页面 ,码修请教
3.Squid基础与配置
4.squid 强制缓存动态页面
5.lamp和lnmp,码修你更愿意选择谁,为什么?
6.linux入门-nginx的安装与配置
[golang] fasthttp 使ç¨http代ç
golang net/n.com)或者甚至站点不允许缓冲,这些情况也都是码修不适合缓冲的。
Squid处理各种情况是码修不错的(当然,这需要远程站点按标准形式工作)。
可执行的码修lua源码加密外部cgi-bin脚本文件不被缓冲,返回正确页眉的码修页面是在一段限制了的时间内被缓冲,而且你可以规定特殊的码修规则以确定什么是可以或不可以被缓冲的,还有缓冲的码修时间为多长。
谈到缓冲的码修用处有多大,这要看Internet的码修容量大小,各有不同。码修对于小型的码修缓冲区(几转磁盘空间)来说,返回值非常高(达到%)。码修这个空间缓冲经常访问的码修站点,如netscape,cnn和其它一些类似情况的站点。如果你增加一倍缓冲的磁盘空间,但你不会成倍增加你的命中率。这是因为你开始缓冲网络中剩余部分时,这些通常时很大的而且很少被访问。一个非常大的高速缓冲区,有转左右,可能返回值仍小于%,除非你对保存数据的时间长短经常改变(一般地你不要分配转的磁盘空间,因为页面很快就会过时,应该被删除掉)。
我们在这里说的目标(object)指的是可保存的web页面或其它类似的可下载页面(ftp文件或目录内容也称为目标(object))。
3.Squid运行在什么系统上?
Squid可运行在大多数Unix和OS/2版本的系统之上,已知的可工作的有:
AIX,Digital Unix,FreeBSD,HP-UX,Irix,Linux,NetBSD,Nextstep,皇冠足球英文源码SCO,Solaris
二、编译安装Squid
1.Squid的未编译版本
我不能保证你能发现所有的Squid的未编译版本。在ftp:squid.nlanr.net上你可以找到一些未编译的版本,尽管它们可能不是最新的版本。
Squid一般很容易编译,这是因为它本身可以自动配置。唯一真正的问题是是否在你的机器上有一个编译器。这可能发生在:你购买了商业OS但是它未包括标准的开发选项。你可能考虑在这种情况下装一个GNU的编译器,如果你在/usr/include下有必需的文件的话。你另外一个选择可能是请求别人的帮助。你也许需要查看“tracker database”以找到在你附近运行Squid的某人。假定他们有适合的硬件,他们很可能会帮助你的。
1. 开始编译之前
运行Squid的最好方法(在我看来)是创建一个特定的用户和组来运行它。我用相同的名字创建了一个Squid用户和一个Squid组,并设置用户的home目录为/usr/local/squid。然后我用su 转到Squid用户,这样文件就都由Squid以及Squid组所有(Squid用户主组必须为Squid)。随后我下载Squid源文件到/usr/local/squid/src并解包。
这可能不是最好的安装Squid到你的系统上的方法,但是,如果多个用户将使用squid,你可以把他们都放在Squid组中。(当然,如果你不理解我所说的,尽可以用你自己的名义去安装,不要以root方式,否则,你将给你的机器带来安全上的危险。)
2. 获得源码
Squid的源始站点是squid.nlanr.net。这里还有许多其它的镜像站点,你可以考虑从你本地的镜像站点获得它,或者在archie服务器上搜索。一旦你已经下载了(一般放在/usr/local/squid/src/下),tb策略源码交换你可以用以下命令解压:
gzip -cd squid-tar.gz-fil | tar xv 或者 tar zxvf squid-tar.gz-fil
这将创建类似于以下行的目录:/usr/local/squid/src/squid-1.1./(依版本而定)。
3. 编译Squid
以下是编译Squid的一般指令。你可能还要做其它的事以编译Squid到你的系统上。通常你可以运行一个配置脚本文件,它指明了你的系统设置和你机器上的标题文件。这样,在解压和解包文件后。cd 到/usr/local/squid/src/squid-version/下并输入:
./configure
这里假定你准备安装Squid到/usr/local/squid下。你也可以用下面的方法修改你的安装目录:
./configure -prefix=/some/other/directory
然后你可能要敲入:make 以及 如果编译一切正常时,输入make install。这将生成在后面将要描述的目录并安装文件到目录下。
三、Squid的基本配置
1. 目录结构
Squid通常创建几个目录。它们一般如下:
/usr/local/squid
/bin
/cache
/etc
/logs/
/src (这是我们早些时候创建的)
/bin包括Squid本身的程序,以及其它程序如ftpget,它可以被Squid用来执行各种功能。
/cache/目录是实际缓冲数据的存放区。你可能要考虑把剩余缓冲放到不同分区去,或甚至是不同的磁盘。它包含的目录如以下行的形式:// // // 和// 这些又包括更多的子目录,最终是缓冲的实际数据。存储数据在多个目录下意味着从大的缓冲区取数据仍然很快,因为你的操作系统要读一个包含个文件的目录会需要很长的时间。
/etc/包含squid.conf文件,它是唯一的Squid配置文件。
/logs/目录可能会很大,特别是如果你包含同属时,它们会查询你每一次连接,这可以使你的log文件双倍增加。注意在cache目录下也有一个/log/文件,但是你不能删除或移动它。它是上面讨论的/usr/local/squid/cache/目录的一个索引。(这与IE的cache有些相似。)
/src/一般包括你运行Squid版本的源文件。
2. 基本配置
所有的Squid配置集中到一个文件----squid.conf。下面将详细讨论仅作为一个缓冲代理服务器的海南朔源码刮了Squid的配置,而不是把它作为一个ment the below line and comment the one out.
# this will run as use "nobody" with the group "nogrtoup"
cache_effective_user nobody nogroup
这个配置允许所有的人访问缓冲区,并创建一个M的缓冲区,使用8M的内存,保持最小型的logs,而且存储所有文件到默认区域,这一般指的是所有文件将以Squid用户,Squid组的名义存储到“/usr/local/squid/cache”中。所有客户请求将来自于端口,并且所有“内部缓冲(inter-cache)”流量将走UDP端口。注意这个配置文件允许所有人访问你的缓冲机器,这可能不是你所希望的,但是至少它可以正常工作。
3. 运行Squid
Squid由一个脚本正常运行,这个脚本在它的进程死掉后重启Squid。这里有脚本的两种版本:/usr/local/squid/bin/RunCache 和 /usr/local/squid/bin/RunAccel 。
RunCache脚本一般在前台运行,所以启动Squid,输入以下内容:
% /usr/local/squid/bin/RunCache %
然后用以下命令查看主Squid log文件/usr/local/squid/logs/cache.log
% more /usr/local/squid/logs/cache.log
你将看到Squid启动的相关信息,如下行所示:
// ::| Starting Squid Cache version 1.1. for i-pc-linux-gnu...
// ::| With file descriptors available
// ::| Initializing IP Cache...
如果你没有看见任何关于FATAL错误的信息,Squid现在就可以很高兴地在你的机器上运行了。
下面将配置你的浏览器,你可以好好地试一下哦!
4. 客户端软件的基本配置
以下是针对浏览器的基本配置:
Netscape(4.5以上版本):
从Edit菜单项中选择Preferences项。在Advanced中Proxies页,点击按钮进入Proxy配置手册,然后再点击View按钮。对每项你的Squid服务器支持的协议项(默认有HTTP,FTP和gopher等)中填入Squid服务器的主机名或IP地址,同时在Port栏中填入Squid服务器的HTTP端口号(默认为)。对你的Squid不支持的协议,可以让这些栏空着。
IE(5.0以上中文版本):
在工具菜单项中选择Internet选项,然后点击连接页,再按局域网设置按钮选择使用代理服务器选项,进入高级项目编辑。然后可以看到与Netscape代理服务器设置类似的界面,按照前面所述的方法分别填入相应项即可。
一般Unix下配置:
如果你使用可以允许你访问web的摩尼定位源码Unix程序(包括wget,lynx和mosaic等),你可以设置shell变量,通过这些变量可以配置好代理。
如果你使用的shell是tcsh或csh,命令如下:
% setenv :/
% setenv gopher_proxy :/
% setenv ftp_proxy :/
现在你就可以使用你的浏览器与缓冲连接以下载页面了。为了检查通过缓冲是否工作正常,可以查看/usr/local/squid/logs/access.log文件的内容,使用命令如下:more /usr/local/squid/logs/access.log。你可以看到所有你进行的访问信息都显示在该文件中。
squid 强制缓存动态页面
其实我本不想写这个标题,我的本意是缓存yupoo api的查询数据,这个过程中找到了参考方法(Caching Google Earth with Squid)。呵呵,所以偶也来一回标题党。
这篇参考流传非常广,Digg上也被提过,我也不知道原出处是哪里了。
可是。。。。你按照它的指示设置,它并不能正确工作!!
话说回来,先说说我的需求。
最近yupoo的访问速度很慢,我有一堆api请求经常无法完成,猜测要么对方限制了同一ip的连接数,要么是yupoo又遇到了新一轮的流量瓶颈。跟Yupoo的zola联系后,确认是他们的负荷太高引起的,并没有限制连接数。所以我要想办法在我这边做一些缓存了。
因为我这边本身就是用squid代理来解决Ajax中调用API的跨域问题的,所以自然是目标瞄准了squid的配置文件。
yupoo api的请求地址是 www.yupoo.com/api/rest/?method=xxxxxxxxx...
大家都知道squid会自动缓存静态文件,可对于这种动态网页怎么让它也缓存起来呢,所以在google上找啊找,找到上面提得那片缓存Google Earth的博客文章。
他的方法是:
acl QUERY urlpath_regex cgi-bin /? intranet
acl forcecache url_regex -i kh.google keyhole.com
no_cache allow forcecache
no_cache deny QUERY
# ----
refresh_pattern -i kh.google % override-expire override-lastmod reload-into-ims ignore-reload
refresh_pattern -i keyhole.com % override-expire override-lastmod reload-into-ims ignore-reload
原理就是用 no_cache allow 和 refresh_pattern 来设定一些缓存规则,将google earth的请求强行缓存起来。
此文一出,自然早有人去验证,可是没人成功,原作者也音讯全无 ... squid的邮件列表里也提到。 ( 看标题进来的朋友,不要急,继续往下读,不会让你空手而回的 )
我也没在意,估计人家功力问题 。先试着用改写一下解决yupoo api的缓存问题。
acl QUERY urlpath_regex cgi-bin /?
acl forcecache url_regex -i yupoo/.com
no_cache allow forcecache
no_cache deny QUERY
refresh_pattern -i yupoo/.com % override-expire override-lastmod reload-into-ims ignore-reload
嘿,果然nnd毫无用处,访问记录里还是 一坨坨 TCP_MISS
于是翻来覆去看文档,找资料,发现是squid的bug惹得祸,不过早已经修正(严格来说是功能扩展补丁)。
我的squid是2.6.,翻了一下源代码,确实已经打好补丁了。
解决这个问题需要refresh_pattern的几个扩展参数(ignore-no-cache ignore-private),这几个参数在squid的文档和配置例子中均没有提到,看来squid还不够与时俱进。
下面讲一下问题所在。
先看看yupoo api返回的HTTP头部信息(cache 相关部分)
Cache-Control: no-cache, must-revalidate
Pragma: no-cache
这两行是控制浏览器的缓存行为的,指示浏览器不得缓存。squid也是遵循RFC的,正常情况下自然不会去缓存这些页面。override-expire override-lastmod reload-into-ims ignore-reload 统统不能对付它。
而那个补丁正是对付这两个Cache-Control:no-cache 和 Pragma: no-cache的。
因此把 refresh_pattern那句要改写成
refresh_pattern -i yupoo/.com % override-expire override-lastmod reload-into-ims ignore-reload ignore-no-cache ignore-private
这样就大功告成了, squid -k reconfigure 看看 access.log ,这回里面终于出现
TCP_HIT/ TCP_MEM_HIT/ 了,说明缓存规则确实起作用了,那个激动啊 ~~~~
====================
补充:
后来我看了一下google earth 服务器 hk1.google.com的HTTP头部,只有
Expires: Wed, Jul :: GMT
Last-Modified: Fri, Dec :: GMT
,这么看来照理不需ignore-no-cache ignore-private也能工作,可能是作者这里写错了
kh.google 应该是 kh./.google才对。
最后总结一下,缓存Google Earth/Map的正确的配置应该是
acl QUERY urlpath_regex cgi-bin /? intranet
acl forcecache url_regex -i kh./.google mt./.google mapgoogle/.mapabc keyhole.com
no_cache allow forcecache
no_cache deny QUERY
# ----
refresh_pattern -i kh./.google % override-expire override-lastmod reload-into-ims ignore-reload ignore-no-cache ignore-private
refresh_pattern -i mt./.google % override-expire override-lastmod reload-into-ims ignore-reload ignore-no-cache ignore-private
refresh_pattern -i mapgoogle/.mapabc % override-expire override-lastmod reload-into-ims ignore-reload ignore-no-cache ignore-private
refresh_pattern -i keyhole.com % override-expire override-lastmod reload-into-ims ignore-reload ignore-no-cache ignore-private
注:
khX.google.com 是google earth的服务器
mtX.google.com 是google map 的服务器
mapgoogle.mapabc.com 是google ditu的服务器
/archives/
lamp和lnmp,你更愿意选择谁,为什么?
在选择lamp和lnmp时,需要考虑的因素包括性能、资源消耗、负载均衡能力以及特定应用的需求。从功能和性能角度来看,Nginx(在lnmp中使用)相较于Apache(lamp的核心Web服务器)在多个方面显示出优势。
Nginx在性能稳定、功能丰富、运维简单以及处理静态文件速度快、消耗系统资源极少等方面表现出色。相较于Apache,Nginx在以下几点上更胜一筹:
1. **资源效率**:Nginx使用资源更少,支持更多并发连接,从而在效率上超越Apache。
2. **负载均衡**:Nginx既可在内部直接支持Rails和PHP,也可作为HTTP代理服务器对外进行服务,提供强大的负载均衡能力。
3. **邮件代理**:Nginx同时具备出色的邮件代理功能。
4. **反向代理**:Nginx能根据URL将请求转向不同用途的集群,如请求转向服务器集群,视频请求转向视频服务器集群。
Nginx作为轻量级的Web服务器,安装简单,配置文件简洁,支持平滑加载新配置,并能在不停服务的情况下进行软件版本升级。这些特性使得Nginx成为处理静态内容的理想选择,其性能和资源消耗均优于Apache。
相比之下,Apache虽具有开源、稳定、模块丰富等优点,但其臃肿的特性导致内存和CPU开销较大,性能不如一些轻量级服务器,如Nginx或Tengine。Apache作为Web服务器,是负载PHP的最佳选择,但当流量很大时,使用Nginx负载非PHP的Web请求更为合适,因为Nginx以其稳定、丰富功能集、低系统资源消耗而闻名。
在缓存策略方面,Apache提供了自己的缓存模块,也可以使用Squid模块进行缓存,以提高访问响应能力。Squid Cache作为高效的Web缓存服务器,可以作为网页服务器的前置cache服务器,缓存相关请求以提高Web服务器速度。使用Squid在Apache前端缓存动态内容,只需适当设置页面实效时间即可。对于访问量巨大,可考虑使用memcache作为分布式缓存。
在PHP加速方面,eAccelerator加速器是自由开放源码的PHP加速器,能优化动态内容缓存,提高PHP脚本缓存性能,加速PHP程序代码执行,使性能提高1-倍。
综上所述,选择lamp或lnmp取决于具体需求。对于追求内存节省,且不特别关注动态内容稳定性的场景,lnmp可能是较好的选择,但可能存在一定的稳定性风险。若动态内容较多,lamp提供更稳定的性能。具体应用时,建议根据实际负载和资源限制进行选择,以实现最佳性能与资源利用的平衡。
linux入门-nginx的安装与配置
在Linux环境下,有许多web代理服务器可供选择,如nginx、squid等,而nginx因其小巧易用,被广泛使用。相较于Windows环境下的IIS或Java专用的Tomcat,nginx提供了更多便利性。本文将指导你如何在Linux系统中安装并配置nginx代理服务器。
使用nginx时,你可能会遇到安装问题。在Linux系统中,软件安装通常有三种方式:通过yum安装、通过源码安装、通过rpm安装。yum安装类似于npm,操作简单快捷,能自动安装所需依赖;源码安装需要下载源码并进行本地编译,适合对Linux有一定了解的用户,实现个性化定制;rpm安装与yum类似,但安装的模块来源于本地资源而非官方镜像。本文将使用yum安装方式来安装nginx服务器。
在安装前,首先需要确认系统上是否已安装nginx。可以通过以下命令查看nginx安装位置:
whereis nginx //nginx在哪里?
或者执行:
which nginx //
这两条命令都可以帮助你找到服务器上已安装的nginx所在路径。若未安装,执行这些命令会提示找不到相关路径,此时需要进行下一步操作;若已安装,命令会返回安装路径,一般位于/usr/local/sbin下。
接下来,我们将使用yum命令安装nginx。执行以下命令即可完成安装:
yum install nginx //安装nginx服务器
安装过程中,系统会自动下载并安装最新版的nginx,并在安装前提示是否确定安装。输入y或yes以确认安装,避免直接回车。
若在安装过程中提示权限不足,可以使用sudo命令尝试安装:
sudo yum install nginx //以管理员权限安装
安装完成后,系统会提示nginx已成功安装,安装目录通常位于/usr/sbin/nginx。
为了确保nginx能够自动启动,执行以下命令添加开机自启动功能:
systemctl enable nginx //开机自启动
在完成安装和配置后,通过输入服务器IP(或虚拟机IP)及浏览器访问,可以查看nginx默认页面。
接下来,我们将介绍如何修改nginx配置以适应不同的需求。在启动nginx后,可以通过修改nginx.conf文件来调整配置。/etc目录下专门存放配置文件,通过whereis nginx命令可以查看到nginx配置文件所在路径。执行以下命令进入目录并查看文件内容:
cd /etc/nginx //进入配置文件目录
ls //查看目录内容
找到并打开nginx.conf文件,通过vim编辑器进行修改,调整静态资源指向和端口监听等设置。
此外,部署网站时需要将网站代码放置在适当位置,如/www/vue-base-demo/目录下,并在nginx.conf中添加相应配置,指定监听端口和资源路径。完成修改后,重启nginx以使配置生效。
若需要卸载nginx,使用以下命令即可完成卸载操作:
yum remove nginx //卸载nginx
至此,通过yum安装和部署nginx的过程结束。在Linux环境中,合理配置nginx能够有效提升web服务性能和安全性。