升级安装 hiawatha 7.4.1 和 nginx 1.0.0 

最近吧,也就是几天的时间,我说用的hiawatha web server 放出了一个小幅度的安装升级包--7.4.1,主要是修复了前一稳定版7.4中会导致服务器崩溃的bug,官方标记为高危级别.

出于安全考虑,进而跟进。还有就是nginx居然1.0.0了,内牛满面~本月12号nginx的作者Igor Sysoev 发布了nginx最新稳定版1.0.0,继windows平台音频播放神器foobar2k后,版本号达到整数 "1".

就冲这版本号,咱也得火速跟进啊~囧

于是,今天午饭后抽出了一段时间,下载了各自的源码包,解压,进入目录

首先是hiawatha web server,
我的configure:
[root@PowerPC hiawatha-7.4.1]# ./configure \
> --prefix=/usr/local/hiawatha \
> --exec-prefix=/usr/local \
> --sysconfdir=/etc/sysconfig \
> --localstatedir=/var \
> --disable-largefile \
> --disable-ipv6 \
> --disable-ssl

检查依赖,通过.
注:关于hiawatha自带的 monitor的取舍,我犹豫了下,毕竟我基本没用到,最终还是编译进去了.

接下来,make && make install 编译和安装。

完成后,恢复安装之前备份好的配置文件,主要是 hiawatha.conf 和 fastcgi.conf 两个.

然后就可以成功启动服务器了.

接下来是nginx,一样,先备份配置文件,由于我的nginx只负责静态文件,故而只有nginx.conf文件.

我的configure:
[root@PowerPC nginx-1.0.0]# ./configure \
> --prefix=/usr/local/nginx \
> --sbin-path=/usr/local/sbin/nginx \
> --conf-path=/etc/sysconfig/nginx/nginx.conf \
> --error-log-path=/var/log/nginx/error.log \
> --pid-path=/var/run/nginx/nginx.pid \
> --lock-path=/var/run/nginx/nginx.lock \
> --user=http \
> --group=web \
> --with-select_module \
> --with-poll_module \
> --with-file-aio \
> --with-http_realip_module \
> --with-http_flv_module \
> --with-http_gzip_static_module \
> --without-http_ssi_module \
> --without-http_auth_basic_module \
> --without-http_geo_module \
> --without-http_rewrite_module \
> --without-http_proxy_module \
> --without-http_fastcgi_module \
> --without-http_uwsgi_module \
> --without-http_scgi_module \
> --http-log-path=/var/log/nginx/access.log \
> --http-client-body-temp-path=/tmp/nginx/req.tmp \
> --without-mail_pop3_module \
> --without-mail_imap_module \
> --without-mail_smtp_module \
> --without-pcre

检查依赖,一切顺利。打印出了编译大致:

Configuration summary
+ PCRE library is disabled
+ OpenSSL library is not used
+ md5: using system crypto library
+ sha1 library is not used
+ using system zlib library

nginx path prefix: "/usr/local/nginx"
nginx binary file: "/usr/local/sbin/nginx"
nginx configuration prefix: "/etc/sysconfig/nginx"
nginx configuration file: "/etc/sysconfig/nginx/nginx.conf"
nginx pid file: "/var/run/nginx/nginx.pid"
nginx error log file: "/var/log/nginx/error.log"
nginx http access log file: "/var/log/nginx/access.log"
nginx http client request body temporary files: "/tmp/nginx/req.tmp"


粗略看下,没有问题。开始编译.make && make install.
之后安装完成.

再恢复下配置文件 nginx.conf,就可以启动nginx了.

至此,升级完成.
[ ] ( 3934 次浏览 ) 永久链接 ( 2.9 / 2613 )
升级 vsftpd 到 2.3.4 

我之前vps上的vsftpd 是2.3.2.今天闲的蛋疼,便逛逛vsftpd的官网,发现新版本2.3.4已经发布了,包含了一些bugfix,不过其中有个关于CPU占用率的问题还是蛮值得升级的,故而火速跟进。

注:有人会奇怪,那2.3.3 哪里去了?其实之前的那些更新内容是2.3.2和2.3.3之间的,不过在2.3.3发布一会后,就出现了编译的bug.于是2.3.4便火速发布了~~

下载源码包(ftp://vsftpd.beasts.org/users/cevans/vsftpd-2.3.4.tar.gz),解压,进入目录

vsftpd 编译很简单,直接make 即可.之后便可以 make install 安装到对应目录下.
其实就是vsftpd 主程序和man手册的安装。

如果不愿意make install 安装的话,也可以手动安装。即

cp vsftpd /usr/local/sbin/vsftpd
cp vsftpd.conf.5 /usr/local/man/man5
cp vsftpd.8 /usr/local/man/man8


而且由于vsftpd 的安装并不包括配置文件,所以也不要备份我原来的配置。直接覆盖安装,即可重新启动了。

检查下版本,
[root@PowerPC vsftpd-2.3.4]# vsftpd -v
vsftpd: version 2.3.4

ok.

启动vsftpd,
[root@PowerPC vsftpd-2.3.4]# vsftpd &
[1] 23817

ok.

测试下pam_mysql 验证登录(其实没必要),
[root@PowerPC vsftpd-2.3.4]# ftp 127.0.0.1
Connected to 127.0.0.1 (127.0.0.1).
220 Welcome to XiaoXin's FTP site.
Name (127.0.0.1:root): xzx
331 Please specify the password.
Password:***
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (127,0,0,1,52,77).
150 Here comes the directory listing.
-rwxrwxr-x 1 502 500 230376 Apr 01 10:46 xmarks.json
-rw------- 1 502 500 246 Dec 12 05:49 unnamed
226 Directory send OK.
ftp> exit
221 Goodbye.

至此,升级成功.
[ ] ( 2585 次浏览 ) 永久链接 ( 3 / 2868 )
让Vranish 传递客户端真实且唯一ip到后置服务器 

首先要说明的是,我的vps是使用varnish作为前置缓存服务器的,后置服务器使用的是nginx 和 hiawatha.前者主要负责 静态文件,而后者则连接php-fpm,处理动态页面.

varnish 监听的是80端口,hiawatha、nginx 分别是81,82.既然有了前置的varnish,自然不想让客户端绕过它直接访问后置服务器,所以我之前做法的是让nginx、hiawatha只监听和允许本地(127.0.0.1、localhost)请求,也就是本地的varnish的请求。

这一点不难做到,通过nginx 的allow、deny 以及 hiawatha 的allowlist 控制符即可达到,见下

#nginx

server {
listen 82;
server_name chinesepaladin.tk;
charset utf-8;
root /home/http/chinesepaladin_tk/;
index index.html index.htm;
allow 127.0.0.1;
deny all;
}


#hiawatha

VirtualHost {
Hostname = chinesepaladin.tk
WebsiteRoot = /home/http/chinesepaladin_tk
StartFile = index.php
UseFastCGI = PHP5
UseToolkit = pw
AccessList = allow 127.0.0.1,deny all
}


而varnish 默认的client ip 就是本身的 server ip(即 127.0.0.1),所以本地访问控制就成功了.

可是,用了一段时间后,问题来了。
由于后置服务器的访客来源都是本地,一直以访客ip作为唯一标识符的wp评分插件——wp-postrating出现问题了,因为来自各个地区的访客都被varnish 标记为了同一个用户——本地访客。

也就是说,一旦有一位访客对某篇文章评了分,之后的其他人都无法再评分了。 囧rz

这个问题很恶心,当我意识到后,我认为很棘手。于是向varnish 邮件列表写了一封求教信,不过收获不大。

终于,在昨天,当我在翻看varnish 的wiki时,我找到了一个大概可行的方案,于是今天我便尝试了一下。

还是与请求对象req有关系,详见下:

if (req.restarts == 0) {
if (req.http.x-forwarded-for) {
set req.http.X-Forwarded-For =
req.http.X-Forwarded-For ", " client.ip;
#req.http.X-Forwarded-For + ", " + client.ip; 不能加'+',报错。
#wiki 里的内容过期了.
} else {
set req.http.X-Forwarded-For = client.ip;
}
}


把上段配置放在vcl_recv()块里面,就行了.这样的话,后置服务器既不会挡掉来自本地的请求,也不会对不通过varnish的请求放行.最重要的是每个访客现在都有了一个唯一的ip来源.

重新读取配置文件,进入控制台
varnishadm -T 127.0.0.1:2000
vcl.load default /etc/sysconfig/varnish/default.vcl
vcl.use default

OK了,评分系统工作正常了。哈哈~

不过高兴没多久,我惊奇的发现使用混合ip的办法,hiawatha居然不认……所有分配给hiawatha的请求依然被无情的挡掉了。我擦~

好在又想到了一个解决方案,就是
1.注释掉hiawatha配置文件里面的所有allowlist.
2.将Binding 块里的Interface 项设成 127.0.0.1,如下

Binding {
Port = 81
Interface = 127.0.0.1 #监听且仅监听 127.0.0.1 地址
MaxKeepAlive = 30
MaxRequestSize = 9999
MaxUploadSize = 10
TimeForRequest = 8,20
}


这样就万无一失了,重启hiawatha.
pkill hiawatha && hiawatha

这次总算成功了。
[ ] ( 2049 次浏览 ) 永久链接 ( 3.1 / 2978 )
编译安装 mysql 5.5.10 和 php 5.3.6 通过 

就在前两天,mysql 开发团队发布了5.5.x分支的最新稳定版—5.5.10,极大的改善了对多核处理器的负载处理能力,于是便打算升级到此版本。

今天早些时候,php 团队也对外发布了其5.3.x分支的最新版本—5.3.6,考虑到我前段时间用的是5.3.6RC1,故而打算跟进到发布版。

于是今天便动手了,先是mysql.

下载源码包,解压,进入目录
我的编译参数:
[root@PowerPC mysql-5.5.10]# cmake . \
> -DCMAKE_BUILD_TYPE:STRING=Release \
> -DCMAKE_INSTALL_PREFIX:PATH=/usr/local/mysql \
> -DCMAKE_USE_RELATIVE_PATHS:BOOL=OFF \
> -DCOMMUNITY_BUILD:BOOL=ON \
> -DENABLED_LOCAL_INFILE:BOOL=OFF \
> -DENABLED_PROFILING:BOOL=OFF \
> -DENABLE_DEBUG_SYNC:BOOL=OFF \
> -DINSTALL_BINDIR:STRING=../bin \
> -DINSTALL_DOCDIR:STRING=docs \
> -DINSTALL_DOCREADMEDIR:STRING=docs \
> -DINSTALL_INCLUDEDIR:STRING=include \
> -DINSTALL_INFODIR:STRING=docs \
> -DINSTALL_LAYOUT:STRING=STANDALONE \
> -DINSTALL_LIBDIR:STRING=lib \
> -DINSTALL_MANDIR:STRING=man \
> -DINSTALL_MYSQLSHAREDIR:STRING=share \
> -DINSTALL_SBINDIR:STRING=../sbin \
> -DINSTALL_SCRIPTDIR:STRING=scripts \
> -DINSTALL_SHAREDIR:STRING=share \
> -DINSTALL_SQLBENCHDIR:STRING=sql \
> -DINSTALL_SUPPORTFILESDIR:STRING=support-files \
> -DMYSQL_DATADIR:PATH=/var/run/mysql \
> -DSYSCONFDIR:PATH=/etc/sysconfig/mysql \
> -DWITHOUT_SERVER:BOOL=OFF \
> -DWITH_EMBEDDED_SERVER:BOOL=OFF \
> -DWITH_EXTRA_CHARSETS:STRING=all \
> -DWITH_INNOBASE_STORAGE_ENGINE:BOOL=OFF \
> -DWITH_PARTITION_STORAGE_ENGINE:BOOL=OFF \
> -DWITH_PERFSCHEMA_STORAGE_ENGINE:BOOL=OFF \
> -DWITH_SSL:STRING=no \
> -DWITH_UNIT_TESTS:BOOL=OFF \
> -DWITH_ZLIB:STRING=bundle

没有任何问题,直接make && make install,编译安装.

好了之后,由于我使用了一个小把戏,把相对于 INSTALL_PREFIX 的bin/sbin 目录安装到/usr/local 下去了,所以mysql 根目录下的scripts/mysql_install_db 不能用了。

所以,恢复数据库只能换别的方法。

首先,把备份的my.cnf文件放到 /etc/sysconfig/my.cnf 下。
之后,直接运行mysql_secure_installation,重置root密码,刷新权限表。
这时再登录mysql,数据就都回来了。

注:该方法可能只适用于5.5.x 之间的升级(我是从5.5.9->5.5.10),且要求datadir里面文件都在。

至此,mysql升级完成。接下来是php.

下载源码包,解压,进入目录
[root@PowerPC php-5.3.6]# ./configure \
> --prefix=/usr/local/php \
> --exec-prefix=/usr/local \
> --sysconfdir=/etc/sysconfig/php \
> --localstatedir=/var \
> --disable-cli \
> --enable-fpm \
> --with-fpm-user=http \
> --with-fpm-group=web \
> --with-config-file-path=/etc/sysconfig/php \
> --with-config-file-scan-dir=/etc/sysconfig/php \
> --disable-ipv6 \
> --with-regex=php \
> --with-pcre-regex \
> --with-zlib \
> --with-bz2 \
> --with-curl \
> --enable-dba \
> --enable-exif \
> --with-gd \
> --with-gettext \
> --with-mhash \
> --enable-mbstring \
> --with-mcrypt \
> --with-mysql=/usr/local/mysql \
> --with-mysql-sock=/tmp/mysql.sock \
> --with-mysqli=/usr/local/bin/mysql_config \
> --disable-pdo \
> --with-libedit \
> --enable-soap \
> --enable-sockets \
> --with-xmlrpc \
> --enable-zip \
> --without-pear \
> --enable-zend-multibyte

检查依赖,报错。找不到 libedit.h 头文件.

yum install libedit-devel

即可.再次检查,通过。make && make install 编译安装.

不一会儿,就搞定了.
恢复下配置文件,php-fpm.conf、php.ini. 便可以启动php-fpm进程。

OK,升级完成.
[ ] ( 1899 次浏览 ) 永久链接 ( 2.9 / 2987 )
利用Live CD重新安装grub至硬盘 

最近把硬盘重新分区了,以前windows 和 linux 各20G的空间明显感觉不够用了(该死的visual studio 和 sql server,擦~),于是便格盘重新划分了下。

windows 就选择了最新的windows 7 with sp1 的ISO,ubuntu 嘛,由于11.04 natty还未发布,故而使用了其最新的测试版 alpha 3。

由于我是先安装的ubuntu(需要用Live CD 自带的分区工具),后安装的windows.导致我之前的硬盘引导被覆盖了,开机直接进windows了。

这个问题我之前曾经处理过一次,不过由于年代久远,忘了具体操作了,反正是重建grub就对了。

于是火速重启,放入ubuntu live CD,光盘启动,进入Live 模式。

我只记得是与"grub"相关的命令,具体是什么记不清了,于是便列出了BIN_PATH下所有的相关命令。
ls /bin | grep grub
ls /sbin | grep grub
……
终于找到了grub-install 和 update-grub 两个利器。

首先安装grub至硬盘,
mount /dev/sda2 ~/tmp #sda2 为linux root 所在分区
grub-install --root-directory=~/tmp /dev/sda2

接下来就是重建grub.cfg了,
update-grub
即可,接下来就会打印出
found linux kernel 2.xx.xx
found windows loader
……
字样,至此,grub安装完毕,再次bs下微软.
[ ] ( 3854 次浏览 ) 永久链接 ( 3 / 2859 )

<< <上一页 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 下一页> >>