麦乐吧

专心而安静的生活

正在浏览 网站技术 里的文章

给Wordpress添加计数器的想法,是因为英文博客http://www.myqq8.com的需要。需要一个计数器来统计访问量,看看我的蹩脚英语能否有访客喜欢。因为对Wordpress还是不太熟悉,于是老办法,在Google上搜了一番,发现Wordpress有不少计数器插件,选来选取,就看中了Count Per Day,功能不需要太多,够用就行,而且看起来和Wordpress结合得很好。

在Wordpress后台的插件(Plugins)中搜索Count Per Day,如下图所示:

搜索Count Per Day

很快就搜索出来了,点击立即安装(install now),插件就被顺利的安装到了Wordpress中。接下来的事情就是要激活它,然后使用Count Per Day,点击”Activate”就可以使用了。

下一步就是要在首页上把计数器显示出来,在后台的外观->小工具中,把Count Per Day标签拖到右边的某个Sidebar里面,如下图所示:

把Count Per Day插入到页面中

然后开始编辑Count Per Day的选项,把需要显示的打勾并设置显示名称,比如Total visitors,Visitors today等等,最后保存就OK了。

你还会发现,在控制面板(Dashboard)下面多了一个Count Per Day的菜单,进入这个菜单你可以查看更加详细的网站访问数据,如下图所示:后台Count Per Day菜单

至此,Count Per Day计数器添加完毕,打开首页就可以看到统计信息了。这款计数器你感觉如何?如果感兴趣就赶快也加上吧。

最近网站改版,为了讨好搜索引擎,不敢轻易删除原来旧的文章链接,可是旧的文章链接如果不删除,也会妨碍新页面的收录。服务器里冗余文件的数量也太多,这时就想到404错误页面的使用。

修改httpd.conf文件,找到如下语句:
#ErrorDocument 404 /missing.html

httpd.conf中的这一条是显示错误页信息的,去掉前面的#,修改为:

ErrorDocument 404 /404.html

然后用DreamWeaver制作一个404.html页面,写上一段欢迎的话,然后加上主页的链接,告诉大家你的网站文章网址改变了。如果字数太少,最好再加上图片,为什么要这么做呢,是因为404.html页面的内容小于 512b,IE 会认为该 404页面不够友好,在IE下将不会成功返回该404错误页面。

再有注意事项就是,不要图省事将404错误页面直接指向网站主页,这样的话有可能会导致搜索引擎忽略你的主页,损失就大了。

服务器重新启动后,FileZilla提示 could not connect to server ,记得头一天清理开机启动项的时候,可能关闭了一个FileZilla的启动项。研究了一番,找到了手动启动FileZilla的办法:

在FileZilla的程序目录下,找到FileZilla server.exe,双击它,就会出现2个提示框,问你是否安装该服务,点OK即可。
然后,再运行FileZilla Server Interface就可以连上服务器了。

FileZilla Server 使用手册
目 录
一、简介
二、安装.
三、配置.
1. 基本设置
2. 匿名FTP配置.
3. 标准FTP用户配置
4. 虚拟目录配置..19
5. 加固Filezilla安全

简介
Filazilla是一个非常流行的开源的免费的FTP客户端、服务器端的项目,目前其客户端软件Filezilla Client 3.0有着非常广泛的市场。
Filezilla的主要优势在于:高安全、高性能。Filazilla的安全性是来自于其开放源代码的。开源为何能保证安全?每一款软件产品诞生后,都有很多人试图发现其漏洞进行攻击,以获取权限和其他利益。如果是开源软件,攻击者就会下载这个软件的源代码,从源头上分析其内部漏洞在那里,并且进行攻击。开源的规模越大,下载阅读其源代码的人也多,这个软件也就越普及。随着其逐渐改进,漏洞就越来越少,最后成为了公认极其安全的软件,这和互联网中数万程序员的贡献是分不开的。这类软件的代表就是Linux平台下的Apache、PHP、MySQL、Bind、Vsftpd等大量高可靠性软件。而不开放源代码的闭源软件,人们无法对其进行研究,因此,只能将他当作“黑盒”来研究,研究的过程中没有源代码,很难找到其错误。即便找到了一些错误,还有更多的漏洞隐藏在代码中,但是因为代码不公开,因此人们短期内无从发现,后期使用会暴露出很多问题。一些闭源软件甚至保留有“后门”,以方便远程遥控,比如 Windows,比如Serv-U。而开源软件代码是开放的,如果开发者在里边植入“后门”等危险代码,就会被互联网上广大的程序员纠出来,因此,这里也可以看出,开源,是对安全的最好保证。
Filezilla的高性能来自于其代码的开发平台是C/C++,自身基础就好于其他VB/Dephi平台开发的应用程序,因此Filezilla具有可媲美IIS的性能。在千兆网络带宽上,可轻松满足数百用户同时高速下载。
目前Filezilla也存在一些不足,主要缺点就是不支持配额,即本身不提供上传、下载总文件大小配额的功能。即便如此,免费的Filezilla正越来越多的占领原来Serv-U等软件的市场,变得更加贴近用户了。

安装
安装过程非常简单,首先下载Filezilla Server安装文件,如果觉得去国外英文官方网站下载速度慢,也可以从这里下载:
下载地址:http://www.swsoft.com.cn/temp/FileZilla_Server.exe
将安装包下载到桌面,准备安装。
双击安装程序开始安装。点击“I Agree”继续。
选择安装方式,默认的标准即可。其中“Source Code”源代码一般不用安装,除非是想研究FileZilla的代码。
选择安装路径,强烈推荐安装到非默认路径,以增加安全系数。例如如下路径:
选择“安装为服务,并随机自动启动”的选项。下边的14147是管理端口,强烈推荐修改此端口,例如改成38121端口。(注意不要和常见服务如80端口冲突)。
选择“当管理员登录时候,启动管理界面”的选项。
安装进行中。
至此安装完成,安装程序自动启动管理控制台,默认是连接到本机的管理端口。管理端口到底是多少,请参考前文安装过程中填写的具体数字是多少。建议选中“总是连接到本服务器”的选项,即表示每次启动管理控制台,都是管理本机的Filezilla服务。下边有一个输入密码的对话框,在里边输入本服务器 Filezilla服务的密码。
注意:修改端口和密码非常重要,这是确保Filezilla安全的重点,必须修改端口,必须设置密码!密码建议足够复杂!
点击OK后,即可启动初始化之后的管理控制台,配置完成。

三、 配置

1. 基本设置

Filezilla默认的模式是Port模式,不是 Passive被动模式。为了解决防火墙后的客户端连接问题,最好是启用Passive模式。要启动被动模式,首先打开管理控制台,点击左起第三个图标 进入系统设置。
点击左侧“Welcom message”菜单,即FTP登录后的欢迎信息。
为了安全起见,强烈建议修改默认的欢迎信息为“Welcom to Serv-U FTP Server”,这样Filezilla在欢迎消息中就会Serv-U字样,以达到欺骗攻击者的目的。注意:本步骤非常重要!
现在我们用telnet去连接一下FTP的21端口,即可看到修改过的“假”的提示信息,这样服务器的安全性可以得到比较明显的提高。
接下来点击“Passive Mode Settings”选项,进入被动模式设置。
选中启动被动模式端口范围的选项,输入10000~10050端口范围,表示被动模式将要使用这个范围的端口。
点击确定保存即可。接下来在防火墙上允许10000~10050端口范围进出,或者
直接允许Filezilla server.exe主程序的互联网访问。
安装的最后一步是加固权限,找到Filezilla的配置文件,格式是xml格式,鼠标右键点击之,并选择属性。
加入Guest组禁止读写的权限,设置为拒绝。
点击确定后,系统会弹出提示,询问拒绝权限优先级高于允许权限,是否要继续,点击是通过即可。
至此初始化基本配置完成。

2. 匿名FTP配置

首先打开管理控制台,点击左起第四个图标 进入系统设置。
打开ftp用户管理界面,点击右侧的 按钮,添加新用户。
在新增用户的对话框中,输入“anonymous”这个名字,即FTP的匿名用户。
点击确认,添加用户完成,返回用户管理界面。
点击左侧的“Shared folders”菜单。点击Add按钮,添加一个目录。
打开浏览文件夹的选项,选择要设置FTP的目录。
点击确定,添加用户完成。
现在用户FTP客户端连接到FileZilla Server上,可以看到匿名FTP已经配置完成。

3. 标准FTP用户配置

首先进入用户设置界面,点击“Add”按钮添加新的 FTP用户。
输入用户名test 。
选中Password前边的多选框,然后输入密码123456。
返回到用户管理界面,点击设置文件夹目录,点击Add添加目录。
添加一个目录到test用户。
添加完成,再右侧选中test用户对这个目录的权限,然后点击左侧的OK按钮,配置完成。
配置完成。现在可以使用客户端来测试登录了。
打开FTP客户端软件,输入test用户名和密码123456,登录到服务器。
登录成功后,可以看到刚才制定的FTP目录下的文件,并具有相应的上传、下载权限。

4. 虚拟目录配置

在具有多个目录需要共享的情况下,设置虚拟目录是比较利于管理的选择。通常,一个FTP服务器需要有一个“Home”主目录,然后设置若干个虚拟目录。
首先进入到用户管理界面,选中Test用户,选中当前设置的目录。
点击“Set as home dir”选项 ,将当前目录设置为“home”主目录。
点击Add按钮,在原有目录之外,再添加一个别的目录,比如选择桌面目录。
新的目录已经添加到目录清单了。此时添加“别名”,点击“Alias”空白处。
添加Aliases别名,注意一定用“ /”符号开头,表示是根目录下的虚拟目录。
添加完成。现在可以去登录FTP,就能看到虚拟目录了。
登录到FTP之后,可以看到虚拟目录出现在test用户的目录中。
至此虚拟目录设置完成。

5. 加固Filezilla安全

*安装Filezilla到非标准目录
*安装过程中设置Filezilla的管理端口监听在127.0.0.1上的随机端口,例如38471等奇怪的没用的端口。
*安装过程中设置Filezilla的管理密码,并设置密码足够复杂
*在Filezilla目录下的xml配置文件上,设置Guests组禁止读取的权限
*修改FTP登录后的提示信息为IIS、Serv-U等信息
*不要开启SSL加密、SFTP等功能,避免以后出现漏洞
经过如上一些配置,Filezilla可以做到很高的安全性。

解决FTP服务器FileZilla server中文乱码问题

最近发现用flashfxp连接后服务器端上的中文全是乱码。网上找了搜索一下信息,大意说是从0.9.14版之后用的字符集是UTF8,使用0.9.14及之前的版本是没有中文乱码问题的。

因此,FileZilla出了FileZillaPV这个补丁:

http://sourceforge.net/projects/filezillapv/files/

选择Patched FileZilla Server这一项,windows下台下对应下载I386架构的文件,先停止FileZilla Server服务,将解压出来的FileZilla server.exe 替换安装目录下的FileZilla server.exe文件,再启动FileZilla Server服务,中文乱码的问题解决了。

Discuz论坛转移服务器时,由于偷懒没有重新安装,只是把全部文件和数据库都拷贝到新服务器上(数据库用ebak2010),然后修改配置文件。

域名转移后,访问论坛很成功,但是唯一缺点是ucenter的应用管理出现“通信失败”,虽然不影响使用,但是google后得知,头像系统还有短消息会受影响。

后发现一教程:UCenter和各应用通讯失败的排查方法视频教程
http://download.comsenz.com/teach/video/uc_app_communicate.swf

把文字截屏下来:我的情况是第5条,填写的时候就填论坛在机器上的文件夹地址(如E:\myle8\bbs/),上次转移uchome的时候出现通信失败,是第3条通信密钥的问题。

VPS support

抢沙发

To Create a Trouble TicketLog into your Account Manager.
From the My Products section, select Servers.
Click Launch Manager next to the server account that you would like to manage. The Dedicated Hosting Manager opens in a new window.
Under Support, click Trouble Ticket. The Trouble Ticket Wizard displays
Enter your contact information, including an email address and phone number.
Enter a summary and a detailed description of your issue under Trouble Ticket Description.
Click Continue.
Review your trouble ticket information and click Submit.

Thank you for contacting Live Chat support for Virtual and Dedicated Servers. This is Heather. How can I help you?
myqq8comadmin: I am a Chinese user,I want my vps support Chinese ,can you help me install Simplified Chinese language pack?
Heather P. – Server Concierge: You can not change the language of a Virtual Dedicated Server.
myqq8comadmin: or can I install the language pack by myself?
Heather P. – Server Concierge: You can not modify the language on a Virtual Dedicated Server.
Heather P. – Server Concierge: It can not be changed.
Heather P. – Server Concierge: Due to the virtualization software, the server retrieves its language from the host node. You would need a fully dedicated server if you wish to change the language.
myqq8comadmin: Ok,I know.Thank you!
Heather P. – Server Concierge: Thanks again for using Live Chat; have a great day.
myqq8comadmin: another question
myqq8comadmin: can I install apache and php on my VPS?
Heather P. – Server Concierge: Yes you can.
myqq8comadmin: and mysql?
Heather P. – Server Concierge: You may install anything on your server that does not violate our license agreement or require system level modifications.
myqq8comadmin: undertand,thank you!
Heather P. – Server Concierge: Is there anything else I can help you with?
myqq8comadmin: no ,thanks!Goodbye!

在一个IP地址上运行多个基于域名的web站 点。

您的服务器有一个IP地址,而在DNS中有很多映射(CNAMES)到这个机器。 您而您想要在这个机器上运行www.example1.comwww.example2.org两个站点。

注意

在您Apache服务器的配置中创建一个虚拟主 机并不会自动在您的DNS中对主机名做相应更新。您必须自 己在DNS中添加域名来指向您的IP地址。否则别人是无法看到您的web 站点的。您可以在您的hosts文件中添加这一条目来进 行测试,但这种方法仅适用于那些有这些条目的机器来使用。

服务器配置

# Ensure that Apache listens on port 80
Listen 80

# Listen for virtual host requests on all IP addresses
NameVirtualHost *

<VirtualHost *>
DocumentRoot /www/example1
ServerName www.example1.com

# Other directives here

</VirtualHost>

<VirtualHost *>
DocumentRoot /www/example2
ServerName www.example2.org

# Other directives here

</VirtualHost>

因为星号匹配所有的地址,所以主服务器不接收任何请求。因为 www.example1.com首先出现在配置文件中,所以它拥有最高 优先级,可以认为是默认首要服务器。这意 味着如果一个接受的请求不能与某个ServerName指令相匹配, 它将会由第一个VirtualHost所伺服。

注意

如果您愿意,您可以用确定的IP地址来取代*。 在这种情况下,VirtualHost的参数必须NameVirtualHost的参数相符:

NameVirtualHost 172.20.30.40

<VirtualHost 172.20.30.40>
# etc ...

不论如何,当您的IP地址无法确定的时候,使用*是很方便的——比如说,您的ISP给您配置的是动态IP地址,而您有使用了某种动态域名解析系统时。因为*匹配任何IP地址,所以在这样的情况下,不论IP地址如何变化,您都不需要另外进行配置。

上述配置就是您在绝大多数情况下使用基于域名的虚拟主机时将要用到 的。事实上,仅在一种情况下这样的配置不会让您满意:当您想为不同的IP 地址或是端口提供不同的内容时。

在多于一个IP的情况下使用基于域名的虚拟 主机。

注意

在这里讨论的任何技术都可以推广到使用任意数量的IP 地址。

服务器有两个IP地址。一个(172.20.30.40)用于“主”服务器—— server.domain.com而另外一个 (172.20.30.50),我们将用于构建两个或多个虚拟主机。

服务器配置

Listen 80

# This is the "main" server running on 172.20.30.40
ServerName server.domain.com
DocumentRoot /www/mainserver

# This is the other address
NameVirtualHost 172.20.30.50

<VirtualHost 172.20.30.50>
DocumentRoot /www/example1
ServerName www.example1.com

# Other directives here ...

</VirtualHost>

<VirtualHost 172.20.30.50>
DocumentRoot /www/example2
ServerName www.example2.org

# Other directives here ...

</VirtualHost>

任何不是针对172.20.30.50的请求都将由主服务器来伺服。 而提交给172.20.30.50却没有主机名或没有 Host:头的请求,都将为www.example1.com伺 服。

在不同的IP的地址(比如一个内部和一个外部地址) 上提供相同的内容。

服务器有两个IP地址(192.168.1.1172.20.30.40)。这个机器位于内部(局域网)网络和外部 (广域网)之间。在外部,域名server.example.com指向 外部地址(172.20.30.40),而在内部,同样的域名指向内 部地址(192.168.1.1)。

服务器可以配置为向来自内部和外部的请求提供同样的内容,您只需要 一个VirtualHost配置段就可以达到这个目的。

服务器配置

NameVirtualHost 192.168.1.1
NameVirtualHost 172.20.30.40

<VirtualHost 192.168.1.1 172.20.30.40>
DocumentRoot /www/server1
ServerName server.example.com
ServerAlias server
</VirtualHost>

现在,从不同的网络提交的请求都会由同一个 VirtualHost来伺服。

注意:

在内网中,您可以使用 server这个名字来代替 server.example.com全名。

跟上面一样,在上述的例子里,您可以用*来取代 具体的IP地址,这样就可以对所有的地址返回相同的内容了。

在不同的端口上运行不同的站点。

如果您想让同一IP的不同端口伺服多个域名。您可以借助在 “NameVirtualHost”标签中定义端口这样的方法来达到这个目的。如果您 想使用不带NameVirtualHost name:port的<VirtualHost name:port>或是直接用Listen指令,您的配置将无法生效。

服务器配置

Listen 80
Listen 8080

NameVirtualHost 172.20.30.40:80
NameVirtualHost 172.20.30.40:8080

<VirtualHost 172.20.30.40:80>
ServerName www.example1.com
DocumentRoot /www/domain-80
</VirtualHost>

<VirtualHost 172.20.30.40:8080>
ServerName www.example1.com
DocumentRoot /www/domain-8080
</VirtualHost>

<VirtualHost 172.20.30.40:80>
ServerName www.example2.org
DocumentRoot /www/otherdomain-80
</VirtualHost>

<VirtualHost 172.20.30.40:8080>
ServerName www.example2.org
DocumentRoot /www/otherdomain-8080
</VirtualHost>

建立基于IP的虚拟主机

一个有两个IP地址(172.20.30.40172.20.30.50)分别对应域名 www.example1.comwww.example2.org的服务 配置如下:

服务器配置

Listen 80

<VirtualHost 172.20.30.40>
DocumentRoot /www/example1
ServerName www.example1.com
</VirtualHost>

<VirtualHost 172.20.30.50>
DocumentRoot /www/example2
ServerName www.example2.org
</VirtualHost>

如果存在主服务器(main server),那么对没有出现在任一个 <VirtualHost>指令中的请求(比如,对 localhost的请求)都会由主服务器来伺服。

混用基于端口和基于IP的虚拟主机

如果您的服务器有两个IP地址(172.20.30.40172.20.30.50)分别对应域名 www.example1.comwww.example2.org。对每 个域名,您都希望在80端口和8080端口发布您的网站。您可以这样配置:

服务器配置

Listen 172.20.30.40:80
Listen 172.20.30.40:8080
Listen 172.20.30.50:80
Listen 172.20.30.50:8080

<VirtualHost 172.20.30.40:80>
DocumentRoot /www/example1-80
ServerName www.example1.com
</VirtualHost>

<VirtualHost 172.20.30.40:8080>
DocumentRoot /www/example1-8080
ServerName www.example1.com
</VirtualHost>

<VirtualHost 172.20.30.50:80>
DocumentRoot /www/example2-80
ServerName www.example1.org
</VirtualHost>

<VirtualHost 172.20.30.50:8080>
DocumentRoot /www/example2-8080
ServerName www.example2.org
</VirtualHost>

混用基于域名和基于ip的虚拟主机

如果您想在一些地址上配置基于域名的虚拟主机而在另外一些配置基于 IP的虚拟主机。

服务器配置

Listen 80

NameVirtualHost 172.20.30.40

<VirtualHost 172.20.30.40>
DocumentRoot /www/example1
ServerName www.example1.com
</VirtualHost>

<VirtualHost 172.20.30.40>
DocumentRoot /www/example2
ServerName www.example2.org
</VirtualHost>

<VirtualHost 172.20.30.40>
DocumentRoot /www/example3
ServerName www.example3.net
</VirtualHost>

# IP-based
<VirtualHost 172.20.30.50>
DocumentRoot /www/example4
ServerName www.example4.edu
</VirtualHost>

<VirtualHost 172.20.30.60>
DocumentRoot /www/example5
ServerName www.example5.gov
</VirtualHost>

使用_default_虚拟主机

为所有端口配置 _default_虚拟主机

这样配置,以捕获任何指向没指定的IP地址和端口的请求。比如 说:一个没被任何虚拟主机使用的地址/端口对。

服务器配置

<VirtualHost _default_:*>
DocumentRoot /www/default
</VirtualHost>

使用这样一个使用通配符端口的默认虚拟主机可以有效的防止请求被主 服务器接收。

如果一个地址/端口对已经被一个基于域名的虚拟主机使用,那么默认虚 拟主机决不会处理发向这个地址/端口的请求。如果一个请求的 Host:头中包含未知信息,或者干脆就没有,那么它会被第一 个基于域名的虚拟主机(就是在配置文件中首先出现的使用了那个地址/端 口对的虚拟主机)处理。

您可以用AliasMatch或RewriteRule来重写任何 请求,使它指向一个简单信息页面(a single information page)(或脚 本)。

为不同的端口部署 _default_虚拟主机

与第一种一样,但我们想让服务器侦听很多端口而第二个 _default_虚拟主机单独侦听80端口。

服务器配置

<VirtualHost _default_:80>
DocumentRoot /www/default80
# ...
</VirtualHost>

<VirtualHost _default_:*>
DocumentRoot /www/default
# ...
</VirtualHost>

侦听80端口的默认虚拟主机(必须出现在所有使用通配符端口 的虚拟主机之前)会捕获所有发向一个没有指定的IP地址的请求。主服务器 将不会用于伺服任何请求。

为一个端口配置 _default_虚拟主机

如果我们只想在80端口上建立唯一的一个默认虚拟主机,我们应该这样 配置:

服务器配置

<VirtualHost _default_:80>
DocumentRoot /www/default
...
</VirtualHost>

发向一个未进行设定的地址的80端口的请求将会为这个虚拟主机伺服; 而发向未进行设定的地址的其他端口的请求为主服务器伺服。

将一个基于域名的虚拟主机移植为一个基于 IP的虚拟主机

如果一个具有www.example2.org域名的虚拟主机(就是基于域名配置示例中的第二个)得到了自己的IP地址。 为了避免一些域名服务器或代理服务器在移植期间仍对这个域名做老的解析, 我们可以采用一种过渡方法:同时提供新旧两个IP地址的解析。
达到这个目的很简单。因为我们只要简单的把新地址 (172.20.30.50)加入VirtualHost指令就行 了。

服务器配置

Listen 80
ServerName www.example1.com
DocumentRoot /www/example1

NameVirtualHost 172.20.30.40

<VirtualHost 172.20.30.40 172.20.30.50>
DocumentRoot /www/example2
ServerName www.example2.org
# ...
</VirtualHost>

<VirtualHost 172.20.30.40>
DocumentRoot /www/example3
ServerName www.example3.net
ServerAlias *.example3.net
# ...
</VirtualHost>

现在这个虚拟主机就可以用新地址(表现为一个基于IP的虚拟主机)和 旧地址(表现为一个基于域名的虚拟主机)同时进行访问了。

使用ServerPath指令

如果我们在一个服务器上运行了两个基于域名的虚拟主机。为了匹配正 确的虚拟主机,客户端必须发送正确的Host:头。而旧的使用 HTTP/1.0的客户端无法发送这样的头,这样,Apache就无法辨别客户端想要 连接哪个虚拟主机(会用主虚拟主机来伺服这个请求)。为了尽量提供向下 兼容性,我们可以可以提供一个主虚拟主机来返回一个页面,在页面中加入 指向基于域名的虚拟主机的URL前缀的链接。

Server configuration

NameVirtualHost 172.20.30.40

<VirtualHost 172.20.30.40>
# primary vhost
DocumentRoot /www/subdomain
RewriteEngine On
RewriteRule ^/.* /www/subdomain/index.html
# ...
</VirtualHost>

<VirtualHost 172.20.30.40>
DocumentRoot /www/subdomain/sub1
ServerName www.sub1.domain.tld
ServerPath /sub1/
RewriteEngine On
RewriteRule ^(/sub1/.*) /www/subdomain$1
# ...
</VirtualHost>

<VirtualHost 172.20.30.40>
DocumentRoot /www/subdomain/sub2
ServerName www.sub2.domain.tld
ServerPath /sub2/
RewriteEngine On
RewriteRule ^(/sub2/.*) /www/subdomain$1
# ...
</VirtualHost>

由于ServerPath指令的作用, 发送到http://www.sub1.domain.tld/sub1/的请求总会 被sub1-vhost所伺服。
如果客户端发送了正确的Host:头,发送到 http://www.sub1.domain.tld/的请求指挥被sub1-vhost伺服。 如果没有发送Host:头,客户端会得到从主虚拟主机发送的信 息页面。
请注意,这里还有一点小问题:如果客户端没有发送Host:头, 发送到http://www.sub2.domain.tld/sub1/的请求还是会被 sub1-vhost伺服。
RewriteRule指令用以确 保正确发送了Host:头的客户端可以任意使用这两种URL变量, 比如说:使用或不使用URL前缀。

这个过程最后是失败的,因为在我最终联系了HOstgator的技术支持后,他们给了我答案:
PPTP is not supported by Virtuozzo / OpenVZ. You would need to use OpenVPN because it uses a TUN device instead of PPP.
但是这个过程却让我学习了不少东西,记录下来,也许哪天换服务器了,或许可以用的到。

首先,在安装之前,需要检测服务器是否支持ppp,
Run the command below to test if your kernel supports MPPE and you should get a return an “ok”:
#modprobe ppp-compress-18 && echo ok
FATAL: Could not load /lib/modules/2.6.18-028stab066.10/modules.dep: No such file or directory
很不幸,我的服务器不支持。但是在我安装的时候忽略了,我以为只是模块没有安装,安装上就可以了。

还要检测服务器是否开启了tun/tap
#cat /dev/net/tun
cat: /dev/net/tun: File descriptor in bad state 返回这样的信息说明服务器开启了tun/tap。
如果其它信息,就说明没有开启,需要客服支持,我给他们发了邮件寻求支持。

I am using a level 3 VPS,but no cpanel.
I do not want to buy cpanel, because that need 10$/mon.
Now ,I want to install PPTP VPN,need tun/tap support,Can you help me enable tun/tap?

客服的服务很好,很快就给我开启了。继续安装。我的CentOS服务器是64位版的。
yum install -y ppp iptables
wget http://poptop.sourceforge.net/yum/stable/packages/pptpd-1.3.4-1.rhel5.1.x86_64.rpm
rpm -ivh pptpd-1.3.4-1.rhel5.1.x86_64.rpm

配置文件编写
1、配置文件/etc/ppp/options.pptpd
mv /etc/ppp/options.pptpd /etc/ppp/options.pptpd.bak
vi /etc/ppp/options.pptpd
输入以下内容:
name pptpd
refuse-pap
refuse-chap
refuse-mschap
require-mschap-v2
require-mppe-128
proxyarp
lock
nobsdcomp
novj
novjccomp
nologfd
idle 2592000
ms-dns 208.67.222.222
ms-dns 208.67.222.220
其中两个dns是OpenDns的IP,也可以用其它的,我目前能找到的就是它们了。
2、配置文件/etc/ppp/chap-secrets (VPN用户配置文件)
mv /etc/ppp/chap-secrets /etc/ppp/chap-secrets.bak
vi /etc/ppp/chap-secrets
输入以下内容:
# Secrets for authentication using CHAP
# client        server  secret                  IP addresses
myusername pptpd mypassword *
注:这里的myusername和mypassword即为PPTP VPN的登录用户名和密码。

3、配置文件/etc/pptpd.conf
mv /etc/pptpd.conf /etc/pptpd.conf.bak
vi /etc/pptpd.conf
输入以下内容:
option /etc/ppp/options.pptpd
logwtmp
localip 192.168.10.1
remoteip 192.168.9.5-10
注:为拨入VPN的用户动态分配192.168.10.5-192.168.10.10之间的IP。

4、配置文件/etc/sysctl.conf
vi /etc/sysctl.conf
输入以下内容:
net.ipv4.ip_forward = 1

保存、退出后执行命令:
#/sbin/sysctl -p

启动PPTP VPN 服务器端:
#/sbin/service pptpd start

启动iptables:
#/sbin/service iptables start
#/sbin/iptables -t nat -A POSTROUTING -o venet0 -s 192.168.10.0/24 -j MASQUERADE

我在最后一步的时候,总是出现错误提示,unknown error 18446744073709551615。

在有点碰运气的状况下,远程VPN连接服务器,总是提示错误619,连接不上。

在无奈之下,查看系统日志\var\log\messages 发现了原因:
This system lacks kernel support for PPP. This could be because the PPPkernel module could not be loaded, or becaus e PPP was not included inthe kernel configuration. If PPP was included as a module, try`/sbin/modprobe -v ppp’. If that fails, check that ppp.o exists i n/lib/modules/`uname -r`/net. See README.linux file in the pppdistribution for more details.

于是,再次检测ppp
I run the command to test:
[root@xin ~]# modprobe -v ppp
FATAL: Could not load /lib/modules/2.6.18-028stab066.10/modules.dep: No such file or directory

然后把错误信息发给客服,客服答复说不支持,建议我安装OpenVPN。
下面就开始OpenVPN的安装之旅。

在经过了一番头疼的折腾后,这次的结果是成功的。过程比较顺利。下面是过程和细节。

由于PPTP对环境的要求很高,大多数的VPS都是基于OpenVZ虚拟化技术的,所以无法安装。这回介绍另一种VPN——OpenVPN,能在绝大多数VPS上安装,而且功能更加强大。(有些话是google来的,比如这句套话)

OpenVPN 需要TUN支持,大多数VPS默认都没有开启,你可以用这个命令检测:cat /dev/net/tun 如果返回信息为:cat: /dev/net/tun: File descriptor in bad state 说明正常,否则就需要客服帮忙开吧。(这段上文中也讲过。)

另外如果你需要连上OpenVPN后能访问互联网,还需要iptables_nat模块支持,用这个命令检测:iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o venet0 -j MASQUERADE

如果返回信息为:iptables: Unknown error 4294967295 说明正常,否则同样需要客服帮忙开通。

环境准备好之后,开始安装OpenVPN了。网上的教程绝大多数都是用源代码编译方式安装的,但我觉得这种方式不便于以后升级维护,这里使用yum来安装。

默认情况下centos的yum源没有OpenVPN的,先安装EPEL这个东西,使用命令:rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/x86_64/epel-release-5-3.noarch.rpm

(注意上面的x86_64,我的VPS是64位的,所以是这个,如果是32位的就要改成i386)

成功后yum源里面就有 OpenVPN了,直接使用命令yum -y install openvpn

这里就体现了yum安装的好处,比如 OpenVPN需要lzo支持,安装的时候会检测系统,没有的组件会自动安装进去。

程序安装到了这个目录:/usr/share/openvpn/easy-rsa

把easy-rsa这个文件夹移出来,用命令:cp -R /usr/share/openvpn/easy-rsa /etc/openvpn/

然后cd /etc/openvpn/easy-rsa/2.0进入,生成OpenVPN需要的证书。

vi vars来编辑环境变量(目录操作和文件的编辑我都是用VNC远程桌面编辑的,跟windows一样)。

把最后几行根据实际情况修改:

export KEY_COUNTRY=”CN
export KEY_PROVINCE=”He
export KEY_CITY=”He
export KEY_ORG=”xxxx
export KEY_EMAIL=”xxxx@mail.com

这些红字需要自己按需修改,在生成证书的时候需要提问的。

保存后运行. vars设置生效。(注意点后面的空格)

接下来运行./build-ca server创建证书颁发机构。

Generating a 1024 bit RSA private key
……………………++++++
….++++++
writing new private key to ‘ca.key’
—–
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ‘.’, the field will be left blank.
—–
Country Name (2 letter code) [CN]:回车
State or Province Name (full name) [He]:回车
Locality Name (eg, city) [He]:回车
Organization Name (eg, company) [xxxx]:回车
Organizational Unit Name (eg, section) []:回车
Common Name (eg, your name or your server’s hostname) [xxxx]:回车
Name []:回车
Email Address [xxxx@mail.com]:回车

注意红色的地方,需要按回车的。

创建CA之后来生成服务器证书,输入./build-key-server server

Generating a 1024 bit RSA private key
…++++++
……………++++++
writing new private key to ’server.key’
—–
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ‘.’, the field will be left blank.
—–
Country Name (2 letter code) [CN]:回车
State or Province Name (full name) [He]:回车
Locality Name (eg, city) [He]:回车
Organization Name (eg, company) [xxxx]:回车
Organizational Unit Name (eg, section) []:回车
Common Name (eg, your name or your server’s hostname) [server]:回车
Name []:回车
Email Address [xxxx@mail.com]:回车

Please enter the following ‘extra’ attributes
to be sent with your certificate request
A challenge password []:回车
An optional company name []:回车
Using configuration from /etc/openvpn/easy-rsa/2.0/openssl.cnf
Check that the request matches the signature
Signature ok
The Subject’s Distinguished Name is as follows
countryName           :P RINTABLE:’CN’
stateOrProvinceName   :P RINTABLE:’He’
localityName          :P RINTABLE:’He’
organizationName      :P RINTABLE:’xxxx’
commonName            :P RINTABLE:’server’
emailAddress          :IA5STRING:’xxxx@mail.com
Certificate is to be certified until Nov 18 17:25:15 2019 GMT (3650 days)
Sign the certificate? [y/n]:y

1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated

同样注意红色字的部分,是需要人工输入的。

服务器证书生成完了,接下来生成客户端证书,理论上每个OpenVPN用户都有独立的证书,我们先来生成一个试试。

输入命令:./build-key client1,这里的client1是客户端名称,如果第二个就是client2了。

Generating a 1024 bit RSA private key
…….++++++
………++++++
writing new private key to ‘client1.key’
—–
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ‘.’, the field will be left blank.
—–
Country Name (2 letter code) [CN]:回车
State or Province Name (full name) [He]:回车
Locality Name (eg, city) [He]:回车
Organization Name (eg, company) [xxxx]:回车
Organizational Unit Name (eg, section) []:回车
Common Name (eg, your name or your server’s hostname) [client1]:回车
Name []:回车
Email Address [xxxx@mail.com]:回车

Please enter the following ‘extra’ attributes
to be sent with your certificate request
A challenge password []:回车
An optional company name []:回车
Using configuration from /etc/openvpn/easy-rsa/2.0/openssl.cnf
Check that the request matches the signature
Signature ok
The Subject’s Distinguished Name is as follows
countryName           :P RINTABLE:’CN’
stateOrProvinceName   :P RINTABLE:’GD’
localityName          :P RINTABLE:’GZ’
organizationName      :P RINTABLE:’Black-Xstar Net Empire’
commonName            :P RINTABLE:’client1′
emailAddress          :IA5STRING:’webmaster@black-xstar.com’
Certificate is to be certified until Nov 18 17:31:21 2019 GMT (3650 days)
Sign the certificate? [y/n]:y

1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated

注意红色字的部分,和上面生成服务器证书差不多。

最后生成Diffie Hellman参数:./build-dh,这个需要一点时间的。完成上面的过程后,把/etc /openvpn/2.0/keys里面的东西下载回来。

接下来我们开始配置OpenVPN了,配置文件只是一个参考,可以根据实际情况修改。

/etc/openvpn目录下,用命令vi server.conf新建一个配置文件,输入下面内容:

port 443
proto tcp
dev tun
ca /etc/openvpn/easy-rsa/2.0/keys/ca.crt
cert /etc/openvpn/easy-rsa/2.0/keys/server.crt
key /etc/openvpn/easy-rsa/2.0/keys/server.key
dh /etc/openvpn/easy-rsa/2.0/keys/dh1024.pem
server 10.8.0.0 255.255.255.0
push “redirect-gateway def1″
push “dhcp-option DNS 208.67.222.222″
push “dhcp-option DNS 208.67.220.220″
client-to-client
keepalive 10 120
comp-lzo
persist-key
persist-tun
verb 3

其中DNS服务器地址可以换成主机商的,这里用的是OpenDns。另外我有了tcp协议和443端口,是为了方便我在cmwap下使用,也可以换别的。

到这里为止OpenVPN就配置好了,接下来我们设置外网访问。

输入vi /etc/sysctl.conf开始编辑,找到net.ipv4.ip_forward = 0改成net.ipv4.ip_forward = 1保存。然后执行sysctl -p这个命令。

输入iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j SNAT –to-source 1.2.3.4添加规则,注意最后1.2.3.4改成你的VPS的IP 地址。(注意红线,to前面是两个短线-)

完成后用/etc/init.d/iptables save保存iptables设置,然后/etc/init.d/iptables restart重新启动下。

把OpenVPN添加到开机启动,用vi /etc/rc.local进入编辑,在后面加入/usr/sbin/openvpn –config /etc/openvpn/server.conf &这一行。(注意:&是结束符)

需要在服务器上完成的操作到这里就结束了,输入openvpn –config /etc/openvpn/server.conf &启动。
安装客户端:
OpenVPN需要安装客户端才行,在http://www.openvpn.net/index.php/open-source/downloads.html下载最新版本的Windows Installer安装。

然后在下载回来keys文件夹里面找到ca.crt、client1.crt和client1.key这三个文件,放到C:\Program Files\OpenVPN\config里面。

同时在这里面新建一个名字为“client1.ovpn”的文本文件,输入下面内容:

client
dev tun
proto tcp
remote 1.2.3.4 443
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert client1.crt
key client1.key
ns-cert-type server
comp-lzo
verb 3

把第四行的1.2.3.4换成VPS的IP地址,然后保存。

在开始菜单里面找到OpenVPN GUI并运行。

文中大部分文字都是google来的,懒得修改了。累了~~~~

前段时间转移网站到新的CentOS系统的服务器上,配置了httpd服务,却忘了在配置文件里面加上ServerAlias,结果在访问短域名 riskang.com 的时候,网站指向了服务器的主域名 www.myle8.com ,而不是 www.riskang.com 站。

赶紧在配置文件里加上 ServerAlias riskang.com 重启动服务器,然后,访问恢复正常。

看来任何细节都不可忽视啊!!