nginx |
以前有过不少版本,不过随着系统翻新,一些库的安装名称发生了变化,所以重新制作一个版本。
这个在全新的ubuntu9.10上可用,完全从全新的系统开始安装,所有步骤都会标明。系统是64位,32位上可能略有区别,那个会在其他帖子里写明。 转载注明来自typengine.com 不管是vps,还是服务器,安装完ubuntu后,首先切换到root身份。用sudo -s命令。 然后输入 lsb_release -a 确认是不是ubuntu 9.10,应该会出现如下提示。 Distributor ID: Ubuntu Description: Ubuntu 9.10 Release: 9.10 Codename: karmic 然后介绍下ubuntu下的编辑器nano的用法,新手可能不太明白vi编辑器的使用,功能过去强大。nano相对更直观更简易些,在ubuntu下默认就有,centos下就需要另外安装 nano 文件名 打开文件 |
|||
什么是header信息?header信息是访客访问你的网站时,web服务返回给客户端的一段信息,包含了网页的一些基本情况。那么为什么要修改 header信息呢?主要是为了防止被居心不良的人利用来获取漏洞信息,例如:通过最最简单的获取header信息发现你的web服务器版本是 nginx/0.7.60,现在又已知这个版本的nginx有某个漏洞,那么就可以利用这个漏洞来攻击你了。互联网信息更新非常快,web服务程序的更新 也是很频繁,我们很多时候由于种种原因不能及时打上补丁,对服务器安全很不利,如果修改header信息达到隐藏web服务器版本的效果,就可以在某种程 度上消除一些隐患。
nginx的header信息修改需要修改源码,因此必须在编译前作修改,如果已经编译了,只能修改源码后重新编译。修改的方法有两种: 一是修改src/core/nginx.h,将 #define NGINX_VERSION "0.7.64" #define NGINX_VER "nginx/" NGINX_VERSION |
|||
一般来说 nginx 配置文件中对优化比较有作用的为以下几项:
worker_processes 8; nginx 进程数,建议按照 cpu 数目来指定,一般为它的倍数。 worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000; 为每个进程分配 cpu,上例中将 8 个进程分配到 8 个 cpu,当然可以写多个,或者将一 个进程分配到多个 cpu。 worker_rlimit_nofile 102400; 这个指令是指当一个 nginx 进程打开的最多文件描述符数目,理论值应该是最多打开文 件数(ulimit -n)与 nginx 进程数相除,但是 nginx 分配请求并不是那么均匀,所以最好与 ulimit -n 的值保持一致。 use epoll; 使用 epoll 的 I/O 模型,这个不用说了吧。 worker_connections 102400; |
|||
防盗链是很多下载类网站必须做的工作,各个网站会采取不同的策略来实现这一功能,各有优缺点。下面介绍一下Linux主机Nginx服务器下利用 accesskey模块实现Nginx服务器深度防盗链的方法。比起常用的通过判断referer的方法,其防盗链能力更加强劲,就算迅雷什么的也没有办 法对付。 一、如何为nginx安装accesskey模块 |
|||
今天在逛nginx wiki时才发现原来nginx 自带了这个功能 这是一个添加子域名(或是当DNS已指向服务器时添加一个新域名)的简单方法。需要注意的是,我已经将FCGI配置进该文件了。如果你只想使服务器为静态文件服务,可以直接将FCGI配置信息注释掉,然后将默认主页文件变成index.html。 这个简单的方法比起为每一个域名建立一个 vhost.conf 配置文件来讲,只需要在现有的配置文件中增加如下内容: |
|||
一个资源下载站,架构是使用LVS调度后端1组机器,这样可以分流带宽压力 1组几十台服务器当然不可能一台一台的去上传了,于是就做成上传到一台,其他服务器使用rsync定期从这台同步资源 最近接到需求方的需求:使用同步机制,当资源上传完在同步的过程中,或者说同步失败时,资源下载就会失败,如何避免这种情况发生 经过调研后确定了两种方法: 1、404错误转向 因为后端都使用nginx,所以在nginx里设置当遇到文件找不到404时自动跳到源机器上,当然这样是要求做一个指向源服务器的单独域名 该方法测试通过,已正式部署实施 在Nginx的Server中添加404自动转向的代码: error_page 404 http://dl2.sj.91.com$request_uri; 2、使用反代方式: |
|||
Apache 有个第三方开发的 mod_rpaf ,用于当 Apache 置于 proxy 后端的时候接收到前端送来的 IP head 详细请看:http://www.oschina.net/discuss/thread/675 简单说就是,Nginx –> Apache 能获取到用户访问的真实IP . 但如果反过来,又或者是 Squid –> Nginx 呢? |
|||
url hash是用于提高squid命中率的一种架构算法,一般现行的架构通常是使用dns轮询或lvs等将访问量负载均衡到数台squid,这样做可以使 squid的访问量做到了均衡,但是忽略了一个重要方面--数据量。在这种架构下,每台squid的数据量虽然是一致的,但通常都是满载,并且存在数据重 复缓存的情况。如果后端服务器数据容量或者用户的访问热点数远远超过缓存机器的内存容量,甚至配置的disk cache容量,那么squid将会大量使用磁盘或者不停与后端服务器索取内容。
在新的架构下,使用nginx架载于squid之前,如果squid机器有4台,那么在这4台机器上装上nginx,nginx使用80端口,而 squid改为3128端口或其他端口。nginx的效率非常高,消耗内存也非常少,所以并不需考虑加装nginx所带来的性能损耗。然后在nginx上 配置url hash,使访问量根据url均衡分布到各台squid,根据url分流之后,每一个url就会只存在于一台squid中,每台squid的数据都会完全 不同。我们有4台机器,每台2G内存的话,原先极有可能因为数据大量重复,内存使用率仍然为2G,而现在我们经过数据均衡分布,8G内存可以达到充分利 用。 |
|||
当POST到Web Server的时候,Web Server接收数据后再复制一份数据给FastCGI进程,这样多了一次复制开销和内存使用,比较浪费,POST数据越大越明显(包括上传)。 nginx允许以文件的方式来传递,nginx先把浏览器POST过来的数据保存在文件里,当传给FastCGI进程的时候,通过文件路径来传递数据(包 括上传),从而提高POST性能。
但是,如果只有nginx是不够的,因为php不支持这种传递数据的方式。所以,必须给php打补丁,php-fpm是php的FastCGI管 理器,php-fpm支持这种文件传输数据的方式。 说到这里,不得不说一个事情,在bbs上我见到有人讨论说,nginx不支持post静态文件。 对于,nginx来说如果没设置fastcgi_pass都是静态文件,而不是通过后缀来判断的。而对于不具备处理能力的静态文件,post是没 有意义的。又因为nginx支持文件方式传递post数据,而文件的清除可能是由后端程序来处理。允许post静态文件,很容易产生大量垃圾文件。我想, 这就是为什么nginx不支持post静态文件的原因了。一是会有问题,二实在是没意义。 |
|||
我在CentOS下配置lnmp组合基本上用的都是同样的配置文件,一直都没出现过问题,可最近在一个vps上安装同样的环境之后,网站在线10多人就出 现了打开速度非常缓慢的情况,有好几次都是直接达到了nginx中设置的脚本最大超时时间300秒,结果导致nginx往客户端浏览器发送了一个504 Gateway Time-out的错误代码,分析了之后改动了几处配置文件,终于避免了该情况的出现。
从 错误代码基本可以确定跟nginx本身无关,主要是提交给php-fpm的请求未能正确反馈而导致,一般情况下,提交动态请求的时候,nginx会直接把 请求转交给php-fpm,而php-fpm再分配php-cgi进程来处理相关的请求,之后再依次返回,最后由nginx把结果反馈给客户端浏览器,但 我这个vps目前跑的是个纯php应用内容,实际上用户所有的请求都是php请求,有的耗费时间比较久,php-cgi进程就一直都被用满,而php- fpm本身的配置文件只打开了10组php-cgi进程,这样的话在线用户稍微多的话就会导致请求无法被正常处理而出错。 大概分析出了原 因,下面做就比较容易了,首先是更改php-fpm的几处配置: 把max_children由之前的10改为现在的30,这样就可以保证 有充足的php-cgi进程可以被使用; |
|||