linux系统apache配置virtualhost

系统版本:centos 5.10

apache版本:2.4.10

apache虚拟主机支持多种形式,比如单ip多网站、多ip单网站等,官网有说明,这里多说几点:

apache 2.4.10配置文件都在跟目录conf文件夹内,主配置文件httpd.conf里面已经没有vhost相关配置内容,需要将

Include conf/extra/httpd-vhosts.conf 改成 Include conf/extra/httpd-vhosts.conf

之后在conf/extra/里面找到配置文件httpd-vhosts.conf,进行配置添加相应的修改

端口相同,不同域名访问

<VirtualHost *:80>;
# ServerAdmin webmaster@dummy-host2.example.com
DocumentRoot "/usr/local/apache/example1"
ServerName 直接写域名
</VirtualHost>

<VirtualHost *:80>
# ServerAdmin webmaster@dummy-host2.example.com
DocumentRoot "/usr/local/apache/example2"
ServerName 直接写域名
</VirtualHost>

相同域名,不同端口访问

<VirtualHost *:80>
# ServerAdmin webmaster@dummy-host2.example.com
DocumentRoot "/usr/local/apache/www"
ServerName 直接写域名
</VirtualHost>

<VirtualHost *:8081>
# ServerAdmin webmaster@dummy-host2.example.com
DocumentRoot "/usr/local/apache/www"
ServerName 直接写域名
</VirtualHost>

无论是上面哪种方式,记得在httpd.conf里面配置DocumentRoot的访问权限,如下

<Directory "上面的DocumentRoot">
#
# Possible values for the Options directive are "None", "All",
# or any combination of:
# Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
#
# Note that "MultiViews" must be named *explicitly* --- "Options All"
# doesn't give it to you.
#
# The Options directive is both complicated and important. Please see
# http://httpd.apache.org/docs/2.4/mod/core.html#options
# for more information.
#
Options FollowSymLinks

#
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
# AllowOverride FileInfo AuthConfig Limit
#
AllowOverride None

#
# Controls who can get stuff from this server.
#
Require all granted

之后重启apache,ok,单一主机配置多网站搭建完成

php实现自动发送邮件神器phpmailer

如果想使用php实现邮件发送功能,phpmailer的确是一个不错的选择。

phpmailer可以连接现有邮箱,类似gmail、qq邮箱、163邮箱等,并支持附件的发送。

最新版的phpmailer可以在这里下载

使用起来也很简单,使用163邮箱的php代码如下

<?php

//接收邮件地址
$to = "";
//邮件标题
$subject = "";
//邮件内容
$body = "";

//$to 表示收件人地址 $subject 表示邮件标题 $body表示邮件正文 
//error_reporting(E_ALL); 
//error_reporting(E_STRICT); 
date_default_timezone_set("Asia/Shanghai");//设定时区东八区 
require_once('phpmailer/class.phpmailer.php'); 
include("phpmailer/class.smtp.php");

//new一个PHPMailer对象出来 
$mail = new PHPMailer(); 

//对邮件内容进行必要的过滤 
$body = eregi_replace("[\]",'',$body);

//设定邮件编码,默认ISO-8859-1,如果发中文此项必须设置,否则乱码 
$mail->CharSet ="UTF-8";

// 设定使用SMTP服务
$mail->IsSMTP();

// 启用SMTP调试功能 
$mail->SMTPDebug = 1;
// 1 = errors and messages 
// 2 = messages only

//启用 SMTP 验证功能
$mail->SMTPAuth = true;
$mail->SMTPSecure = "ssl"; // 安全协议 
$mail->Host = "smtp.163.com"; // SMTP 服务器 
$mail->Port = 465; // SMTP服务器的端口号 
$mail->Username = "xxx@163.com"; // SMTP服务器用户名 
$mail->Password = "xxx"; // SMTP服务器密码 
$mail->SetFrom('xxx@163.com', '发件人名称'); 
$mail->AddReplyTo("xxx@163.com","发件人名称"); 
$mail->Subject = $subject; 

$mail->MsgHTML($body); 
$address = $to; 
$mail->AddAddress($address, $team); 

//增加附件
$mail->AddAttachment("images/phpmailer.gif");
$mail->AddAttachment("images/phpmailer_mini.gif");

//检查邮件是否发送成功
//也是发送执行函数
if(!$mail->Send()) 
{ 
$message = "邮件发送失败!" . $mail->ErrorInfo; 
$tag = "0";
} 
else 
{ 
$message = "邮件发送成功!请检查邮箱(".$email.")"; 
$tag = "1";
} 
if ($tag == "1")
{
        //带消息跳转
    header('location:xxx.php?message='.$message);
}
else
{
        //带消息跳转
    header('location:xxx.php?message='.$message);
}

?>

上述连接163邮箱使用了SSL协议端口,SMTP服务器地址,不同邮箱不一样,自己更改一下就可以了。

如果使用非SSL协议端口,自己按照邮箱里说明修改一下。

附件内容不超过邮箱限制就可以,强调Send()函数必须有哈,没有不发送的。

最后,附上自己用的一个phpmailer版本

PHPMailer-master

linux上几种好用ftp软件设置

方法一:vsftpd(推荐)\
方法二:gssftp\
方法三:proftpd\

方法一:vsftpd(推荐)

测试机FTP服务:

先用rpm -qa | grep vsftpd命令或者which vsftpd检查是否已经安装,找到了就说明已经安装过。

# rpm -qa | grep vsftpd
vsftpd-2.0.1-5.EL4.3

# which vsftpd
/usr/sbin/vsftpd

如果ftp没有安装,使用命令 yum -y install vsftpd 安装(使用root帐号安装)

# yum -y install vsftpd

启动服务

运行命令 /sbin/service vsftpd start 或者 /etc/init.d/vsftpd start

# /sbin/service vsftpd start

开机自启动

启动要让FTP每次开机自动启动,运行命令: /sbin/chkconfig –level 35 vsftpd on

# /sbin/chkconfig --level 35 vsftpd on

FAQ:

1.启动失败

ftp还是不行 或者 /sbin/service vsftpd start 失败了怎么办?
答:这个问题十有八九是因为21端口被占用了,导致vsftpd无法启动,找到占用服务然后停掉。往往都是另外的ftp服务,例如proftpd、xinetd等。

# netstat -anpt | grep :21    
tcp 0   0 0.0.0.0:21    0.0.0.0:*   LISTEN  5026/proftpd:
# netstat -anpt | grep :21 
tcp 0   0 0.0.0.0:21    0.0.0.0:*   LISTEN  2431/xinetd

停掉已有的服务,释放端口,然后再启动vsftpd。例如停掉proftpd,命令/sbin/service proftpd stop。

2.不能匿名访问怎么办?

答:修改vsftp配置,打开匿名访问开关。vim /etc/vsftpd/vsftpd.conf,找到#anonymous_enable=YES,打开注释。

# vim /etc/vsftpd/vsftpd.conf
# /sbin/service vsftpd restart

3.服务和端口启动正常,但是提示No such directory?

答:目录或文件权限不正常,修改目录或文件权限。目录要有-x可执行权限。

# wget ftp://cp01-test08.epc.baidu.com:/home/work/a.txt
--15:02:33--  ftp://cp01-test08.epc.baidu.com/home/work/a.txt
           => `a.txt'
Resolving cp01-test08.epc.baidu.com... 10.94.219.34
Connecting to cp01-test08.epc.baidu.com|10.94.219.34|:21... connected.
Logging in as anonymous ... Logged in!
==> SYST ... done.    ==> PWD ... done.
==> TYPE I ... done.  ==> CWD /home/work ...
No such directory `home/work'.
# ls -l
# drwxr--r--  48 work work  4096 Dec 22 14:56 work
# chmod 755 work
# drwxr-xr-x  48 work work  4096 Dec 22 14:57 work

方法二:gssftp

需要设置Ftp和Telnet服务文件,才能启动Ftp和Telnet服务 (需要root权限)

vi /etc/xinetd.d/gssftp,server_args 干掉-a   ,disable设置为no /*配置开启telnet服务*/
vi /etc/xinetd.d/krb5-telnet ,disable 设置为no /*配置开启telnet服务*/
cd /etc/rc.d/init.d/ && /sbin/service xinetd restart /*xinetd是超级守护进程 telnet /ftp 是挂在 xinetd 底下的 重启一下就就可以读取新的配置开启ftp服务*/

方法三:proftpd

测试服务

确认ftp服务使用的是proftpd,或准备使用proftpd。
是否正在使用proftpd

# netstat -anpt | grep :21
 tcp        0      0 0.0.0.0:21                  0.0.0.0:*                   LISTEN      28828/proftpd: (acc

安装过proftpd

# which proftpd
/usr/sbin/proftpd

检查配置文件/etc/proftpd.conf,这里常常目录权限被注释掉,导致虽有ftp服务但是访问ftp无权限。附件提供了一份正常的proftpd.conf,供参考对比。

重启服务

# /sbin/service proftpd restart
  Shutting down proftpd:                                     [  OK  ]
  Starting proftpd:                                          [  OK  ]

参考配置

ServerName                        "ProFTPD"
ServerType                        standalone
DefaultServer                        on

timesGMT off
# Port 21 is the standard FTP port.
Port                                21
# Umask 022 is a good standard umask to prevent new dirs and files
# from being group and world writable.
Umask                                022
IdentLookups                             off
UseReverseDNS                            off
# To prevent DoS attacks, set the maximum number of child processes
# to 30.  If you need to allow more than 30 concurrent connections
# at once, simply increase this value.  Note that this ONLY works
# in standalone mode, in inetd mode you should use an inetd server
# that allows you to limit maximum number of processes per service
# (such as xinetd)
MaxInstances                        30

# Set the user and group that the server normally runs at.
User                                nobody
Group                                nogroup

# Normally, we want files to be overwriteable.
<Directory /*>
  AllowOverwrite                on
</Directory>

# A basic anonymous configuration, no upload directories.
<Anonymous ~ftp>
  User                                ftp
  Group                                ftp
  # We want clients to be able to login with "anonymous" as well as "ftp"
  UserAlias                        anonymous ftp

  # Limit the maximum number of anonymous logins
  MaxClients                        30

  # We want 'welcome.msg' displayed at login, and '.message' displayed
  # in each newly chdired directory.
  DisplayLogin                        welcome.msg

  # Limit WRITE everywhere in the anonymous chroot
  <Limit WRITE>
    DenyAll
  </Limit>
<Directory /etc>
        <Limit ALL>
        DenyAll
        </Limit>
</Directory>
<Directory /lib64>
        <Limit ALL>
        DenyAll
        </Limit>
</Directory>

<Directory /lib>
        <Limit ALL>
        DenyAll
        </Limit>
</Directory>

<Directory /bin>
        <Limit ALL>
        DenyAll
        </Limit>
</Directory>

<Directory /sbin>
        <Limit ALL>
        DenyAll
        </Limit>
</Directory>

<Directory /usr>
        <Limit ALL>
        DenyAll
        </Limit>
</Directory>

<Directory /var>
        <Limit ALL>
        DenyAll
        </Limit>
</Directory>


<Directory /home/*>
        <Limit LIST NLST>
        AllowAll
        </Limit>
</Directory>


<Directory />
        <Limit LIST NLST>
        DenyAll
        </Limit>
</Directory>

<Directory /opt>
        <Limit LIST NLST>
        DenyAll
        </Limit>
</Directory>

<Directory /flash/>
        <Limit LIST NLST>
        AllowAll
        </Limit>
</Directory>

  <Limit WRITE>
    DenyAll
  </Limit>

</Anonymous>

注:【定制高级篇】若想设置更细粒度目录控制权限,请参考官网进行配置,官网limit说明http://www.proftpd.org/docs/howto/Limit.html。

vsftp安装与配置

vsftp是一种ftp搭建工具软件,文章记录了搭建过程和用户配置方法。

系统环境环境:centos 6.5

vsftp安装

yumm install vsftp

ftp系统本地用户认证配置

说明,这个配置文件的作用是允许本地用户访问ftp、并且不能切换到上层目录,每个行尾必须没有空格和其它字符,必须删掉我的注释才能用,不然会启动报错的。系统用户配置文件:

vim /etc/vsftpd.conf
ftpd_banner=ftp.xnow.me
listen=YES
local_enable=yes      #是否启用本地用户
write_enable=YES
local_umask=022
anonymous_enable=yes      #设置认证模块
pam_service_name=vsftpd
xferlog_enable=YES
xferlog_file=/var/log/vsftpd.log                      #日志文件
xferlog_std_format=YES
userlist_enable=yes

启用用户列表,默认位置:/etc/vsftpd.user_list

userlist_deny=no
# 只有列表文件中的问户可以登陆ftp
#chroot_list_enable=no
#chroot_local_user=yes  
local_root=/data/program/cdnwebs     #ftp用户登陆后的目录

chroot_local_user=NO      
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.user_list   #规定不能访问上层目录的用户
allow_writeable_chroot=YES

最后四句的作用是:不允许用户切换到上一层目录,将用户chroot到指定的local_root目录下! 如果没有最后一句,会报错:

“500 OOPS: vsftpd: refusing to run with writable root inside chroot ()”

因为在新版的vsftp中,chroot的目录不能被写入,必须使用chmod a-w /ftp,加了最后一行,就不用设置目录为不能写入了!重启vsftp再登陆,就发现当前目录是“/”中了!然后,接着配置认证模块和用户列表等:

vim /etc/pam.d/vsftpd
session    optional     pam_keyinit.so    force revoke
auth       required pam_listfile.so item=user sense=deny file=/etc/ftpusers onerr=succeed
auth       required pam_shells.so
auth       include password-auth
account    include password-auth
session    required     pam_loginuid.so
session    include password-auth

useradd -s /sbin/nologin -d /data/program/cdnwebs  ftpuser
chown -R ftpuser:ftpuser  /data/program/cdnwebs 
vim /etc/vsftpd.user_list
ftpuser
touch /etc/ftpusers

由于/etc/pam.d/vsftpd中定义sense=deny,所以/etc/ftpusers里的用户默认会被拒绝,所以只是创建一个空文件,这样,就只有ftpuser这个系统用户能登陆ftp了!

第二种ftp认证—-虚拟用户

这种认证方法把虚拟用户全部映射到一个真实的系统用户上,可以增加ftp的安全性!这个方式的认证依赖于db4-utils,需要使用它的db_load命令生成加密的认证文件!首先配置主配置文件/etc/vsftpd.conf

vim /etc/vsftpd.conf
anonymous_enable=NO
local_enable=yes
write_enable=YES
local_umask=022
xferlog_enable=YES
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=YES
listen=YES
ftpd_banner=Welcom to my virtual FTP server.
guest_enable=YES        #开启虚拟用户认证
guest_username=ftpuser   #虚拟用户映射为系统本地用户ftpuser
pam_service_name=ftp.vuser    # 认证名为ftp.vuser
chroot_local_user=yes
user_config_dir=/etc/vsftpd/vsftpd_user_conf     #虚拟用户的配置文件目录
virtual_use_local_privs=YES
allow_writeable_chroot=YES

新建虚拟用户aaa

mkdir /etc/vsftpd/vsftpd_user_conf
vim /etc/vsftpd/vsftpd_user_conf/aaa
write_enable=yes
local_root=/data

创建账号和密码文件:

vim /etc/vsftpd/vusers.list       #文件基数行是用户名,偶数行是密码,中间不要有空格和空行
aaa
123456

生成加密的认证文件:

db_load -T -t hash -f /etc/vsftpd/vusers.list /etc/vsftpd/vsftpd_login.db

添加认证模块:

vim /etc/pam.d/ftp.vuser 
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login

这里注意模块的路径是lib还是lib64,由系统位数决定,后面的路径是生成的认证文件的路径。

启动ftp

service vsftp start