网站运维、系统运维管理研究

解决在安装有低版本的php mysql客户端连接高版本mysql的问题

在MySQL服务器上用root登录,执行

mysql>set password for user1@”localhost”=old_password('yourPassword');

这是因为:
     原因是因为新版MySQL使用了新的密码验证机制,这需要客户端的版本要在4.0以上,原来的密码函数被改为old_password();,这样使用password()生成的密码在旧的版本上的客户端就无法使用,而PHP中的MySQL客户端都是3.23的(当然,mysqli的扩展除外),问题就在这了。
  另外,如果某个MySQL用户密码为空的话,不需要这么做,因为为空并不使用密码函数

2008/07/20L i n u x系统

没有评论
94 views

CENTOS5下VSFTPD的设置(虚拟用户分下载用户/下载、上传但不能删除用户/管理用户)

CENTOS5下VSFTPD的设置(虚拟用户分下载用户/下载、上传但不能删除用户/管理用户)

一、安装

yum -y install vsftpd*

yum -y install pam*

yum -y install db4*

二、系统帐户

1、vsftpd服务的宿主用户

useradd vsftpd -s /sbin/nologin

2、vsftpd虚拟宿主用户

useradd ftpuser -s /sbin/nologin

*不允许相关用户登录。

三、vsftpd.conf设置

1、备份

cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.ysbk

2、设置

—-

anonymous_enable=NO

设定不允许匿名访问

local_enable=YES

设定本地用户可以访问。注意:主要是为虚拟宿主用户,如果该项目设定为NO那么所有虚拟用户将无法访问。

write_enable=YES

设定可以进行写操作。

local_umask=022

设定上传后文件的权限掩码。

anon_upload_enable=NO

禁止匿名用户上传。

anon_mkdir_write_enable=NO

禁止匿名用户建立目录。

dirmessage_enable=YES

设定开启目录标语功能。

xferlog_enable=YES

设定开启日志记录功能。

connect_from_port_20=YES

设定端口20进行数据连接。

chown_uploads=NO

设定禁止上传文件更改宿主。

xferlog_file=/var/log/vsftpd.log

设定Vsftpd的服务日志保存路径。注意,该文件默认不存在。必须要手动touch出来,并且由于这里更改了Vsftpd的服务宿主用户为手动建立的Vsftpd。必须注意给与该用户对日志的写入权限,否则服务将启动失败。

xferlog_std_format=YES

设定日志使用标准的记录格式。

nopriv_user=vsftpd

设定支撑Vsftpd服务的宿主用户为手动建立的Vsftpd用户。注意,一旦做出更改宿主用户后,必须注意一起与该服务相关的读写文件的读写赋权问题。比如日志文件就必须给与该用户写入权限等。

async_abor_enable=YES

设定支持异步传输功能。

ascii_upload_enable=YES

ascii_download_enable=YES

设定支持ASCII模式的上传和下载功能。

ftpd_banner=Welcome to Awei FTP servers

设定Vsftpd的登陆标语。

chroot_local_user=YES

禁止本地用户登出自己的FTP主目录。

pam_service_name=vsftpd

设定PAM服务下Vsftpd的验证配置文件名。因此,PAM验证将参考/etc/pam.d/下的vsftpd文件配置。

以下这些是关于Vsftpd虚拟用户支持的重要配置项目。默认Vsftpd.conf中不包含这些设定项目,需要自己手动添加配置。

guest_enable=YES

设定启用虚拟用户功能。

guest_username=ftpuser

指定虚拟用户的宿主用户。

virtual_use_local_privs=YES

设定虚拟用户的权限符合他们的宿主用户。

user_config_dir=/etc/vsftpd/vconf

设定虚拟用户个人Vsftp的配置文件存放路径。也就是说,这个被指定的目录里,将存放每个Vsftp虚拟用户个性的配置文件,一个需要注意的

地方就是这些配置文件名必须和虚拟用户名相同。

—-

3.建立Vsftpd的日志文件,并更该属主为Vsftpd的服务宿主用户:

[root@KcentOS5 ~]# touch /var/log/vsftpd.log

[root@KcentOS5 ~]# chown vsftpd.vsftpd /var/log/vsftpd.log

4.建立虚拟用户配置文件存放路径:

[root@KcentOS5 ~]# mkdir /etc/vsftpd/vconf/

四、制作虚拟用户数据库文件

1.先建立虚拟用户名单文件:

[root@KcentOS5 ~]# touch /etc/vsftpd/virtusers

建立了一个虚拟用户名单文件,这个文件就是来记录vsftpd虚拟用户的用户名和口令的数据文件,我这里给它命名为virtusers。为了避免文件的混乱,我把这个名单文件就放置在/etc/vsftpd/下。

2.编辑虚拟用户名单文件:

[root@KcentOS5 ~]# vi /etc/vsftpd/virtusers

—————————-

download

1234

upload

5678

admin

9012

—————————-

编辑这个虚拟用户名单文件,在其中加入用户的用户名和口令信息。格式很简单:“一行用户名,一行口令”。

3.生成虚拟用户数据文件:

[root@KcentOS5 ~]# db_load -T -t hash -f /etc/vsftpd/virtusers /etc/vsftpd/virtusers.db

五、设定PAM验证文件,并指定虚拟用户数据库文件进行读取

在/etc/pamd.vsftpd的文件头部加入以下信息(在后面加入无效)

—-

auth sufficient /lib/security/pam_userdb.so db=/etc/vsftpd/virtusers

account sufficient /lib/security/pam_userdb.so db=/etc/vsftpd/virtusers

—-

六、虚拟用户的配置

1、download用户,只能下载不能上传和删除

write_enable=NO

2、upload能下载、上传但不能删除

write_enable=YES

cmds_allowed=ABOR,CWD,LIST,MDTM,MKD,NLST,PASS,PASV,PORT,PWD,QUIT,RETR,RNFR,RNTO,SIZE,STOR,TYPE,USER,REST,CDUP,HELP,MODE,NOOP,REIN,STAT,STOU,STRU,SYST,FEAT

file_open_mode=0444

3、admin对ftp进行管理

默认的vsftpd.conf文件就可以了,不要做任何修改。

4、补充:

如果对上传用户要限制其上传目录(主目录),需要加入

local_root=/home/ftp/upload

前将/home/ftp/upload给予相应的权限。

2008/07/18WEB服务器

没有评论
227 views

在nginx中开启PHP的404等error错误转向

公司统一使用了404 50x等比较直观的页面,在使用的时候忽然发现使用fastcgi的php当访问一个不存在的.php页面,居然不生效,不会转向,当时查了很多资料没有找到相关说明,今天逛nignx wiki的时候忽然发现有个设置

location ~ .php

{

include conf/fastcgi_params.conf;

fastcgi_pass 127.0.0.1:10080;

fastcgi_index index.php;

fastcgi_param SCRIPT_FILENAME /data/wwwroot/haha.91.com/webroot$fastcgi_script_name;

fastcgi_intercept_errors on;

}

即加入了这一行

fastcgi_intercept_errors on;

这样就能正常做error的错误转向了

紧接着问题又来了,怎么实现全局都实现这个功能呢,这样一个个的加可不是办法啊!

冥想中……

2008/07/10系统架构

没有评论
77 views

高性能web应用(转)

高性能web应用的基本系统结构:
a) 基本结构:
负载均衡=>反向代理=>静态内容缓存=>静态内容=>动态应用加速=>动态应用=>数据缓存=>数据存储=>分布式应用
b) 负载均衡:负载均衡(Load Balance)建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性,避免了网络关键部位出现单点失效。
i. 负载均衡有两方面的含义:
1. 首先,大量的并发访问或数据流量分担到多台节点设备上分别处理,减少用户等待响应的时间;
2. 其次,单个重负载的运算分担到多台节点设备上做并行处理,每个节点设备处理结束后,将结果汇总,返回给用户,系统处理能力得到大幅度提高。
ii. 常见的负载均衡方法:
1. DNS轮询:适合静态内容的简单均衡机制;
2. 智能DNS:在广域网中,对适合分布的静态内容可以做到智能判断用户来源,提供最近的Cache分发服务器方便用户就近高速访问;
3. 反向代理:将外部请求转发给内部的多台服务器,从而达到负载均衡的目的;同时可以将负载均衡和高速缓存结合在一起,提高性能;随着并发连接数量的增加,代理服务器本身的负载也变得非常大,最后反向代理服务器本身会成为服务的瓶颈。
4. 四层交换:
5. 内容交换(七层交换/URL交换):
a) 在HTTP请求和报头中有很多对负载均衡有用的信息。可以从这些信息中获知客户端所请求的URL和网页,负载均衡设备就可以将 所有的图像请求引导到一个图像服务器,或者根据URL的数据库查询内容调用CGI程序,将请求引导到一个专用的高性能数据库服务器。
b) 可以根据HTTP报头的cookie字段来使用Web内容交换技术改善对特定客户的服务;
c) 如果能从HTTP请求中找到一些规律,还可以充分利用它作出各种决策;
d) 除了TCP连接表的问题外,如何查找合适的HTTP报头信息以及作出负载平衡决策的过程,是影响Web内容交换技术性能的重要 问题。如果Web服务器已经为图像服务、SSL对话、数据库事务服务之类的特殊功能进行了优化,那么采用这个层次的流量控制将可以提高网络的性能。
c) 反向代理:(并入负载均衡一节)
d) 静态内容缓存:通常与反向代理合并在一起,提供静态内容(HTML页面,图片,js脚本,css文件等等)缓存。
e) 静态内容:CMS、Blog、Wiki等静态化应用。
f) 动态应用加速:利用Apache的MPM模式或者Zend、eAccelarator等加速引擎为动态应用加速。
g) 动态应用:网站核心功能SNS、交友、互动等等。
h) 数据缓存:memcached。
i) 数据存储:内存、磁盘文件或者数据库。
j) 分布式应用:分布式文件存储、数据库集群。
继续阅读 »

制作nginx和php-cgi启动程序

使用php-cgi及nginx的时候想重启服务的时候是使用kill后再启动的方式,每次都敲N多字进去,还常常忘记,这里有一个启动程序,用这个至少简单了点:

NGINX

touch /etc/init.d/ngnix

chmod +x nginx

#! /bin/sh

#This is a ShellScript For nginx webserver on Centos

#Powered by zhanggs

#2008-07

set -e

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

DESC="nginx daemon script"

NAME=nginx

DAEMON=/usr/local/nginx/bin/$NAME

CONFIGFILE=/usr/local/nginx/conf/nginx.conf

PIDFILE=/var/run/$NAME.pid

SCRIPTNAME=/etc/init.d/$NAME

# Gracefully exit if the package has been removed.

test -x $DAEMON || exit 0

d_start() {

$DAEMON -c $CONFIGFILE || echo -n " already running"

}

d_stop() {

kill -QUIT `cat $PIDFILE` || echo -n " not running"

}

d_reload() {

kill -HUP `cat $PIDFILE` || echo -n " can't reload"

}

case "$1" in

start)

echo -n "Starting $DESC: $NAME"

d_start

echo "…"

;;

stop)

echo -n "Stopping $DESC: $NAME"

d_stop

echo "…"

;;

reload)

echo -n "Reloading $DESC configuration…"

d_reload

echo "reloaded…"

;;

restart)

echo -n "Restarting $DESC: $NAME"

d_stop

# One second might not be time enough for a daemon to stop,

# if this happens, d_start will fail (and dpkg will break if

# the package is being upgraded). Change the timeout if needed

# be, or change d_stop to have start-stop-daemon use –retry.

# Notice that using –retry slows down the shutdown process somewhat.

sleep 1

d_start

echo "…"

;;

*)

echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2

exit 3

;;

esac

exit 0

/etc/init.d/nginx start 启动

/etc/init.d/nginx stop 停止

/etc/init.d/nginx restart 重启

/etc/init.d/nginx reload 重载

PHP-CGI

touch /etc/init.d/phpcgi

chmod +x phpcgi

#!/bin/sh

#

#This is a ShellScript For nginx webserver on Centos

#Powered by zhanggs

#2008-07

set -e

set -e

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

DESC=”php-fastcgi daemon”

NAME=php-fastcgi

DAEMON=/usr/local/php/bin/spawn-fcgi

PIDFILE=/var/run/$NAME.pid

SCRIPTNAME=/etc/init.d/$NAME

phpcgi=”/usr/local/php/bin/php-cgi”

prog=$(basename ${phpcgi})

FCGIPORT=”10080″

FCGIADDR=”127.0.0.1″

FCGIUSER=”nobody”

FCGIGROUP=”nobody”

PHP_FCGI_CHILDREN=5

PHP_FCGI_MAX_REQUESTS=1000

# Gracefully exit if the package has been removed.

test -x $DAEMON || exit 0

d_start() {

echo “Starting $DESC: $NAME”

#$DAEMON -c $CONFIGFILE || echo ” already running”

$DAEMON -a $FCGIADDR -p $FCGIPORT -C $PHP_FCGI_CHILDREN -u $FCGIUSER -g $FCGIGROUP -P $PIDFILE -f “${phpcgi}” || echo ” already r

unning”

}

d_stop() {

echo “Stopping $DESC: $NAME”

test -f $PIDFILE && kill -QUIT `cat $PIDFILE`

}

d_reload() {

echo “Reloading $DESC configuration…”

kill -HUP `cat $PIDFILE` || echo ” can’t reload”

}

case “$1″ in

start)

d_start

echo “started.”

;;

stop)

d_stop

echo “stoped.”

;;

reload)

d_reload

echo “reloaded.”

;;

restart)

echo “Restarting $DESC: $NAME”

d_stop

# One second might not be time enough for a daemon to stop,

# if this happens, d_start will fail (and dpkg will break if

# the package is being upgraded). Change the timeout if needed

# be, or change d_stop to have start-stop-daemon use –retry.

# Notice that using –retry slows down the shutdown process somewhat.

sleep 3

d_start

echo “.”

;;

*)

echo “Usage: $SCRIPTNAME {start|stop|restart|force-reload}” >&2

exit 3

;;

esac

exit 0

/etc/init.d/phpcgi start 启动

/etc/init.d/phpcgi stop 停止

/etc/init.d/phpcgi restart 重启

/etc/init.d/phpcgi reload 重载

解决nginx访问二级目录不自动加/线的问题

以nginx做web server的时候

访问如http://www.domian.com/test的时候不会自动加上/ 而造成访问出错

要解决这个方式,目前我使用的使用正则表达式自动加/的方式,只是好象有更好的解决方法

需要加的内容如下

if (-d $request_filename){

rewrite ^/(.*)([^/])$ http://$host/$1$2/ permanent;

}

在apche中强制转到https 443端口方式

在apache的需要转向的80端口的站点中增加以下正则表达式

RewriteEngine on

RewriteCond %{SERVER_PORT} ^80$

RewriteRule ^(.*)$ https://%{SERVER_NAME}/$1 [L,R]

这样访问http的时候就会自动转到https

返回顶部