标签归档:nginx

[原] 根据自定义http header控制nginx选择反向代理服务器

好吧。本来想多写点的,现在没时间,太监了。
说下核心:客户端自定义的http header,在nginx的配置文件里能直接读取到。
条件:header必须用减号“-”分隔单词,nginx里面会转换为对应的下划线“_”连接的小写单词。
nginx配置:

测试:

[原] Installing Nagios 4.0.5 on nginx and Ubuntu 12.04

Nagios® Core™ is an Open Source system and network monitoring application. It watches hosts and services that you specify, alerting you when things go bad and when they get better.Nagios Core was originally designed to run under Linux, although it should work under most other unices as well.

以下是2014-4-17安装记录:

== 服务端 ==

安装依赖包:(其实不装也能安装成功,就是部分功能会disabled)

用户组:

从 http://www.nagios.org/download/ 下载解压:

编译安装:

建立htpasswd.users,这个如果装了apache2有htpasswd这个命令,不然可以用某个python脚本:
(如果服务器不想装python,可以找台有python的服务器;或者找台装了apache的机器运行htpasswd;或者装个httpd不启动也没关系)
(生成的htpasswd.users是个文本文件,复制到服务器的 /etc/nagios/htpasswd.users)

修改联系人email,在contacts.cfg的email那里(34行)

安装mail报警通知所需包(安装时选择”Internet Site”;输入域名)
(注意:不装这个mail包编译nagios-plugins-2.0.1会error,但是编译nagios-plugins-2.0没问题。。。)

安装插件:

启动nagios

安装fcgi

编辑nginx.conf

其中对/nagios/开头的地址进行了rewrite,(nagios内部很多页面是写死/nagios/开头的,导致images、css等出不来)

启动服务

登录后就看到nagios的监控界面了

[原] Nagios-xi在CentOS的安装tips (web server是nginx)

1)./fullinstall会报各种包依赖错误。(其实是 ./1-prereqs 这一步)
需要先卸载原来的mysql、php,反正哪些包依赖错误就卸掉原来的。

2)Nagios默认的httpd是apache,所以默认安装各种出错。修改 ./xi-sys.cfg

把 httpd='httpd'改成 httpd='nginx'

3)./A-subcomponents
Nagios的subcomponents里面很多install / post-install脚本还是写死的
service httpd restart,要改成 service $httpd restart
(nagioscore、nrdp),nagiosmobile是php写的安装脚本,不改没关系(不影响结果,不过会执行不下去)
反正按subcomponents的install脚本照着来,如果每个都确认解压或者复制成功,不用重头执行A-subcomponents,
直接 touch installed.subcomponents 算了

4)./B-installxi
跟上面3)的问题一样,httpd 改成 $httpd

5)./E-importnagiosql
因为apache的conf和nginx完全不同(而前面步骤Nagios装的是apache的conf),这一步需要访问
http://localhost/nagiosql/index.php 肯定出错,导致这一步出问题。
在/etc/nginx/nginx.conf内新增一行:
include /etc/nginx/conf.d/nagiosxi.conf;
在/etc/nginx/conf.d/下新建nagiosxi.conf,参照/etc/httpd/conf.d/nagiosql.conf设置:

(待续)

[原] 减小nginx编译后的文件大小 (Reduce file size of nginx)

默认的nginx编译选项里居然是用debug模式(-g)的(debug模式会插入很多跟踪和ASSERT之类),编译以后一个nginx有好几兆。
去掉nginx的debug模式编译,编译以后只有375K(nginx-0.5.33, gcc4)。
在 auto/cc/gcc,最后几行有:
# debug
CFLAGS=”$CFLAGS -g”
注释掉或删掉这几行,重新编译即可。-g参数用法详见这篇blog:[原]Linux下的c/c++ GDB调试

Nginx uses debug mode (-g) in compiling by default, which result in several MB of it’s size.
After debug disabled, the file size of nginx reduced to 375K (nginx-0.5.33, gcc4).
open auto/cc/gcc, find this at last several lines:
# debug
CFLAGS=”$CFLAGS -g”
delete it, and recompile. More of -g: Linux c/c++ GDB debug

[晕] nginx的internal属性的bug

文档上说,internal用来禁止用户直接通过地址访问。
syntax: internal
default: no
context: location

internal indicates that the matching location can be used only for so called “internal” requests.
For external requests it will return the error “Not found” (404).
Internal requests are the following:
1) requests redirected by the instruction error_page
2) subrequests created by the command include virtual of the “ngx_http_ssi_module” module
3) requests changed by the instruction rewrite of the “ngx_http_rewrite_module” module

An example to prevent clients fetching error pages directly:

实际发现,rewrite的用internal修饰后就挂了。像下面这个配置,如果/realpath/设了internal,用/proxypath/访问就是404。
这个跟本意是违背的(本意只能通过/proxypath/访问,而隐藏/realpath/),应该是nginx的bug(我的版本0.5.32)

[原]nginx在Slackware 11.0下的编译安装

configure就不说了,make的时候提示:
objs/src/event/ngx_event.o(.text+0xdbc): In function ngx_event_init_conf':src/event/ngx_event.c:1140: warning: warning: epoll_create is not implemented and will always fail
objs/src/event/modules/ngx_epoll_module.o(.text+0x1cc): In function
ngx_epoll_add_event’:src/event/modules/ngx_epoll_module.c:250: warning: warning: epoll_ctl is not implemented and will always fail
objs/src/event/modules/ngx_epoll_module.o(.text+0x416): In function `ngx_epoll_process_events’:src/event/modules/ngx_epoll_module.c:402: warning: warning: epoll_wait is not implemented and will always fail

epoll是高性能网络io,居然不被系统支持,我明明用的是2.6.17的内核。于是make menuconfig,到 General setup / Configure standard kernel features 发现’Enable event poll’ 是关闭的,于是启用。

然后重新编译内核:

话说,Slackware 12.0都出来几个月了,改天我要去装一下。^_^

[译]nginx的worker_processes设为多少才合适?

搜索到原作者的话:
一般一个进程足够了,你可以把连接数设得很大。如果有SSL、gzip这些比较消耗CPU的工作,而且是多核CPU的话,可以设为和CPU的数量一样。或者要处理很多很多的小文件,而且文件总大小比内存大很多的时候,也可以把进程数增加,以充分利用IO带宽(主要似乎是IO操作有block)。

As a general rule you need the only worker with large number of
worker_connections, say 10,000 or 20,000.

However, if nginx does CPU-intensive work as SSL or gzipping and
you have 2 or more CPU, then you may set worker_processes to be equal
to CPU number.

Besides, if you serve many static files and the total size of the files
is bigger than memory, then you may increase worker_processes to
utilize a full disk bandwidth.

Igor Sysoev

经我实践配置,多cpu+gzip+N多小文件+文件总大小大大超过内存 的环境(BBS啦~),设置为cpu的两倍较好。(不过一个nginx是4.3M噢)

[原]nginx+FastCGI调试成功

终于明白,俺的Linux基本功果然很烂。。。。
FastCGI echo
Request number 1, Process ID: 7422
No data from standard input.

Request environment:

FCGI_ROLE=RESPONDER
GATEWAY_INTERFACE=CGI/1.1
QUERY_STRING=
REQUEST_METHOD=GET
CONTENT_TYPE=
CONTENT_LENGTH=
SCRIPT_NAME=/echo.net
REQUEST_URI=/echo.net
DOCUMENT_URI=/echo.net
DOCUMENT_ROOT=/home/nginx/html
SERVER_PROTOCOL=HTTP/1.1

…..

[译]利用Nginx的X-Accel-Redirect头实现下载控制(附带php和rails实例)

有时你可能需要实现控制下载:即将下载文件的请求转发到某脚本, 然后由这脚本决定怎么做:发送这个文件给用户,出现决绝访问页,或着其他的事。在lighttpd服务器里可以通过从脚本传回X-Sendfile头实现;而Nginx是通过使用X-Accel-Redirect头实现的。在这篇文章里我会尽量简捷地描述在php和rails里如何使用这一特性。

假设你使用Apache运行PHP或Rails产生动态内容,而用Nginx作为前台反向代理(bianbian注:反向代理又称为服务器加速(Server accelerate),原理是将用户的请求转发到目标服务器,然后将结果转发给用户。好处有很多:保护目标服务器安全、负载均衡容易实现、有点类似防火墙;坏处我认为就是要传递用户的IP的时候多了些步骤)。你就达到了两个目标:

  1. 因为Nginx服务器会改善所有对动态内容的缓慢请求,能节省服务器的资源(细节正在这里). (bianbian注:凭我对Nginx的理解,这个就是Nginx会缓存客户端的请求,等全部发送完毕了才一起转发给后台脚本,比如在上载文件的时候。好处是减少后台脚本等待的时间,确实对性能有一定改善;坏处就是在脚本里时时显示上载进度的功能是不可能实现了[当然,以后Nginx如果自己开放这个进度API也是可能的,不过也不是脚本级的,好在显示进度的功能不常用])
  2. 你能对静态文件的下载做出控制.(bianbian注:后面的一大段都是说这个啦!)

在这里,假设网站位于 /var/www 目录,而一些静态文件(类似电影、歌曲、或其他)位于 /var/www/files 目录。Apache监听8080端口。

首先,让我们看一看nginx配置:
继续阅读

[原]安装nginx作为web服务器及反向代理

Nginx [engine x] is an HTTP(S) server, HTTP(S) reverse proxy and IMAP/POP3 proxy server written by Igor Sysoev. It has been running on many heavily loaded Russian sites for more than two years.
俄罗斯人写的,我总觉得俄罗斯都是高手。。。。再仔细看了一下(所有能看懂的文档),基于事件的,对小文件的读写性能很好,也更适合做反向代理(nginx 》Squid 》Apache),更适合BBS的情况。所以决定装这个。
http://sysoev.ru/nginx/download.html
俄语,不要紧,最上面那个就是最新的。
下载解压安装: