全球主机交流论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

CeraNetworks网络延迟测速工具IP归属甄别会员请立即修改密码
查看: 4901|回复: 12
打印 上一主题 下一主题

[经验] 给DirectAdmin面板增加nginx前端

[复制链接]
跳转到指定楼层
1#
发表于 2010-5-11 13:58:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
装好Directadmin面板之后,如果高并发流量进来,apache跑起来还是很吃力的.因此在前面装个nginx是很有必要的.但是由于我对directadmin的api还不熟悉.对它绑定域名这块没有较好的方法.不能实现动静分离.装上nginx也只是起到一个缓存和keepalive的作用.nginx监听80端口.apache监听81端口.

安装还是很简单的.我只在CentOS环境中测试.在Debian平台上没有测试.大家自己测试一下呗.OK.step by step...

第一步,安装nginx.这里我没有安装pcre库.伪静态还是沿用apache的.htaccess.
cd /usr/local/src/
wget http://nginx.org/download/nginx-0.7.65.tar.gz
tar -zxf nginx-0.7.65.tar.gz
cd nginx-0.7.65
./configure --user=apache --group=apache --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx  --conf-path=/etc/nginx/conf/nginx.conf --pid-path=/var/log/nginx/nginx.pid --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --http-client-body-temp-path=/tmp/nginx_client --http-proxy-temp-path=/tmp/nginx_proxy --http-fastcgi-temp-path=/tmp/nginx_fastcgi --with-http_stub_status_module
make
make install
添加启动脚本
#! /bin/sh
ulimit -n 65535
# Description: Startup script for nginx
# chkconfig: 2345 55 25
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DESC="nginx daemon"
NAME=nginx
DAEMON=/usr/sbin/$NAME
CONFIGFILE=/etc/nginx/conf/nginx.conf
PIDFILE=/var/log/nginx/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME
set -e
[ -x "$DAEMON" ] || exit 0
do_start() {
$DAEMON -c $CONFIGFILE || echo -n "nginx already running"
}
do_stop() {
kill -INT `cat $PIDFILE` || echo -n "nginx not running"
}
do_reload() {
kill -HUP `cat $PIDFILE` || echo -n "nginx can't reload"
}
case "$1" in
start)
echo -n "Starting $DESC: $NAME"
do_start
echo "."
;;
stop)
echo -n "Stopping $DESC: $NAME"
do_stop
echo "."
;;
reload)
echo -n "Reloading $DESC configuration..."
do_reload
echo "."
;;
restart)
echo -n "Restarting $DESC: $NAME"
do_stop
sleep 1
do_start
echo "."
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|reload|restart}" >&2
exit 3
;;
esac
exit 0
嗯嗯.这个脚本很熟悉吧,呵呵.记得赋予执行权限,chmod 755 /etc/init.d/nginx 接着设置nginx.conf.
mv /etc/nginx/conf/nginx.conf /etc/nginx/conf/nginx.conf.bak
mkdir /etc/nginx/conf/ips
vim /etc/nginx/conf/nginx.conf
输入以下内容

worker_processes  4;
worker_rlimit_nofile  51200;
events {
worker_connections  51200;
use epoll;
}
error_log  /var/log/nginx/error.log info;
http {
include    mime.types;
default_type  application/octet-stream;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 120;
gzip on;
gzip_http_version 1.0;
gzip_min_length  1100;
gzip_comp_level  3;
gzip_buffers  4 32k;
gzip_types    text/plain text/xml text/css application/x-javascript application/xml application/xml+rss text/javascript application/atom+xml;
ignore_invalid_headers on;
connection_pool_size  256;
request_pool_size  32k;
server_names_hash_max_size 2048;
server_names_hash_bucket_size 256;
output_buffers   4 64k;
postpone_output  1460;
#open_file_cache max=1000 inactive=300s;
#open_file_cache_valid    600s;
#open_file_cache_min_uses 2;
#open_file_cache_errors   off;
client_max_body_size    100m;
client_body_buffer_size 256k;
client_header_buffer_size 256k;
large_client_header_buffers 4 256k;
client_header_timeout  3m;
client_body_timeout 3m;
send_timeout     3m;
include "/etc/nginx/conf/ips/*.conf";
}
在/etc/nginx/conf/ips路径下.添加监听的IP地址的虚拟主机配置,有多个IP.就添加多几个主机配置,以192.168.2.1为例:
server {
listen 192.168.2.1:80;
server_name _;
access_log off;
error_page 400 401 402 403 404 405 406 407 408 409 500 501 502 503 504 @backend;
location @backend {
internal;
proxy_connect_timeout 30s;
proxy_send_timeout   300;
proxy_read_timeout   300;
proxy_buffer_size    46k;
proxy_buffers     16 32k;
proxy_busy_buffers_size 64k;
proxy_temp_path      /dev/shm/proxy_temp;
proxy_redirect http://$host:81 http://$host;
proxy_redirect http://www.$host:81 http://$host;
proxy_pass http://192.168.2.1:81;
proxy_pass_header User-Agent;
proxy_set_header   Host   $host;
proxy_set_header   X-Real-IP  $remote_addr;
proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
}
location / {
proxy_connect_timeout 30s;
proxy_send_timeout   300;
proxy_read_timeout   300;
proxy_buffer_size    64k;
proxy_buffers     16 32k;
proxy_busy_buffers_size 64k;
proxy_temp_path      /dev/shm/proxy_temp;
proxy_redirect http://$host:81 http://$host;
proxy_redirect http://www.$host:81 http://$host;
proxy_pass http://192.168.2.1:81;
proxy_pass_header User-Agent;
proxy_set_header   Host   $host;
proxy_set_header   X-Real-IP  $remote_addr;
proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
上例中的error_page都转发到后端.

第二步,给apache安装rpaf模块
cd /usr/local/src/
wget http://stderr.net/apache/rpaf/download/mod_rpaf-0.6.tar.gz
tar -zxf mod_rpaf-0.6.tar.gz
cd mod_rpaf-0.6
/usr/sbin/apxs -i -c -n mod_rpaf-2.0.so mod_rpaf-2.0.c
安装完了之后.编辑/etc/httpd/conf/httpd.conf文件.添加以下内容:
LoadModule rpaf_module /usr/lib/apache/mod_rpaf-2.0.so
#Mod_rpaf settings
RPAFenable On
RPAFproxy_ips 127.0.0.1 [your_ips]
RPAFsethostname On
RPAFheader X-Forwarded-For
[your_ips]改成你自己的监听IP

第三步,修改DirectAdmin设置

这一步要做的是修改默认apache的监听端口.需要对apache的配置有一定的认识.进入/usr/local/directadmin/data/templates目录.可以看到很多设置文件.这些文件都是默认建立账户或绑定域名时.directadmin会根据这些模板生成相关程序的参数配置文件.

主要要修改的文件包括: ips_virtual_host.conf virtual_host2_sub.conf virtual_host.conf virtual_host_sub.conf httpd.conf redirect_virtual_host.conf virtual_host2.conf 在这些文件中,搜索"80",改成"81".这一步没什么好说的了.细心一点改.
httpd.conf
Port 81
Listen 81
Listen 443
ips_virtual_host.conf virtual_host2_sub.conf virtual_host.conf  virtual_host_sub.conf httpd.conf redirect_virtual_host.conf  virtual_host2.conf
<VirtualHost |IP|:81>
此外还要修改已绑定域名的配置文件.位于/etc/httpd/conf /usr/local/directadmin/data/users/ 两处目录.进入以上路径后可以使用以下命令查找端口.
grep 80 . -r
端口还是改成"81".然后还是细心一点.接着重启一下nginx和httpd.
最后再修改一个地方就完事了.
cd /etc/httpd/conf/
vim httpd.conf
注释掉Include /etc/httpd/conf/ips.conf,再在下面把你所监听的IP都添加上去:
NameVirtualHost ip:81
NameVirtualHost ip:443
tip:1.建议关闭apache的Deflate模块.直接在/etc/httpd/conf/httpd.conf中注释掉Deflate模块那一段.在第165行.
2.如果想要在httpd重启的时候一并重启nginx.可以在/etc/init.d/httpd中自行添加命令.



转载自:iCodex

[ 本帖最后由 诡谲 于 2010-5-17 17:56 编辑 ]

评分

参与人数 2威望 +30 收起 理由
lavps + 5 我很赞同
wzwen + 25 我很赞同

查看全部评分

2#
发表于 2010-5-11 14:00:34 | 只看该作者
速度不错,不知道资源占用咋样
3#
发表于 2010-5-11 14:01:38 | 只看该作者
牛X
4#
 楼主| 发表于 2010-5-11 14:02:28 | 只看该作者
原帖由 cpuer 于 2010-5-11 14:00 发表
速度不错,不知道资源占用咋样

QQ截图未命名.png (50.25 KB, 下载次数: 10)

QQ截图未命名2.png (50.78 KB, 下载次数: 10)
5#
 楼主| 发表于 2010-5-11 14:09:11 | 只看该作者
请求静态文件

1.png (43.05 KB, 下载次数: 9)

2.png (10 KB, 下载次数: 8)
6#
发表于 2010-5-11 14:13:10 | 只看该作者
我来支持
7#
发表于 2010-5-11 14:13:46 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
8#
发表于 2010-5-11 14:16:00 | 只看该作者

回复 5# 的帖子

没这么强吧...我的巴斯500个并发丢过去.nginx都挂了.
9#
发表于 2010-5-11 14:21:55 | 只看该作者
对PHP这样的动态文件无效吗?
10#
 楼主| 发表于 2010-5-11 14:28:38 | 只看该作者

回复 9# 的帖子

???无效???是什么意思?
动态请求还是走后端的.nginx不能处理php.

这个配置是所有请求全部都转到后端.
利用内部带宽传输速率高的特点,然后增大缓冲区,实现的一种加速效果.

另外.你也可以考虑用memcache模块优化一下静态请求.效果也是很不错的.不过比较耗费内存.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|全球主机交流论坛

GMT+8, 2025-10-30 09:20 , Processed in 0.068030 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表