最新 分享

Publish our news and thoughts with all.

Popular Articles

Recent Stories

RewriteCond和13个mod_rewrite应用举例Apache伪静态

1.给子域名加www标记RewriteCond %{HTTP_HOST} ^([a-z.]+)?example\.com$ [NC]RewriteCond %{HTTP_HOST} !^www\. [NC]RewriteRule .? http://www.xample.com%{REQUEST_URI} [R=301,L]这个规则抓取二级域名的%1变量,如果不是以www开始,那么就加www,以前的域名以及{REQUEST_URI}会跟在其后。2.去掉域名中的www标记RewriteCond %{HTTP_HOST} !^example\.com$ [NC]RewriteRule .? http://example.com%{REQUEST_URI} [R=301,L]3.去掉www标记,但是保存子域名RewriteCond %{HTTP_HOST} ^www\.(([a-z0-9_]+\.)?example\.com)$ [NC]RewriteRule .? http://%1%{REQUEST_URI} [R=301,L]这里,当匹配到1%变量以后,子域名才会在%2(内部原子)中抓取到,而我们需要的正是这个%1变量。4.防止图片盗链一些站长不择手段的将你的图片盗链在他们网站上,耗费你的带宽。你可以加一下代码阻止这种行为。RewriteCond %{HTTP_REFERER} !^$RewriteCond %{HTTP_REFERER} !^http://(www\.)?example\.com/ [NC]RewriteRule \.(gif|jpg|png)$ - [F]如果{HTTP_REFERER}值不为空,或者不是来自你自己的域名,这个规则用[F]FLAG阻止以gif|jpg|png 结尾的URL如果对这种盗链你是坚决鄙视的,你还可以改变图片,让访问盗链网站的用户知道该网站正在盗用你的图片。RewriteCond %{HTTP_REFERER} !^$RewriteCond %{HTTP_REFERER} !^http://(www\.)?example\.com/.*$ [NC]RewriteRule \.(gif|jpg|png)$ 你的图片地址 [R=301,L]除了阻止图片盗链链接,以上规则将其盗链的图片全部替换成了你设置的图片。你还可以阻止特定域名盗链你的图片:RewriteCond %{HTTP_REFERER} !^http://(www\.)?leech_site\.com/ [NC]RewriteRule \.(gif|jpg|png)$ - [F,L]这个规则将阻止域名黑名单上所有的图片链接请求。当然以上这些规则都是以{HTTP_REFERER}获取域名为基础的,如果你想改用成IP地址,用{REMOTE_ADDR}就可以了。5.如果文件不存在重定向到404页面如果你的主机没有提供404页面重定向服务,那么我们自己创建。RewriteCond %{REQUEST_FILENAME} !-fRewriteCond %{REQUEST_FILENAME} !-dRewriteRule .? /404.php [L]这里-f匹配的是存在的文件名,-d匹配的存在的路径名。这段代码在进行404重定向之前,会判断你的文件名以及路径名是否存在。你还可以在404页面上加一个?url=$1参数:RewriteRule ^/?(.*)$ /404.php?url=$1 [L]这样,你的404页面就可以做一些其他的事情,例如默认信心,发一个邮件提醒,加一个搜索,等等。6.重命名目录如果你想在网站上重命名目录,试试这个:RewriteRule ^/?old_directory/([a-z/.]+)$ new_directory/$1 [R=301,L]在规则里我添加了一个“.”(注意不是代表得所有字符,前面有转义符)来匹配文件的后缀名。7.将.html后缀名转换成.php前提是.html文件能继续访问的情况下,更新你的网站链接。RewriteRule ^/?([a-z/]+)\.html$ $1.php [L]这不是一个网页重定向,所以访问者是不可见的。让他作为一个永久重定向(可见的),将FLAG修改[R=301,L]。8.创建无文件后缀名链接如果你想使你的PHP网站的链接更加简洁易记-或者隐藏文件的后缀名,试试这个:RewriteRule ^/?([a-z]+)$ $1.php [L]如果网站混有PHP以及HTML文件,你可以用RewriteCond先判断该后缀的文件是否存在,然后进行替换:RewriteCond %{REQUEST_FILENAME}.php -fRewriteRule ^/?([a-zA-Z0-9]+)$ $1.php [L]RewriteCond %{REQUEST_FILENAME}.html -fRewriteRule ^/?([a-zA-Z0-9]+)$ $1.html [L]如果文件是以.php为后缀,这条规则将被执行。9.检查查询变量里的特定参数如果在URL里面有一个特殊的参数,你可用RewriteCond鉴别其是否存在:RewriteCond %{QUERY_STRING} !uniquekey=RewriteRule ^/?script_that_requires_uniquekey\.php$ other_script.php [QSA,L]以上规则将检查{QUERY_STRING}里面的uniquekey参数是否存在,如果{REQUEST_URI}值为script_that_requires_uniquekey,将会定向到新的URL。10.删除查询变量Apache的mod_rewrite模块会自动辨识查询变量,除非你做了以下改动:a).分配一个新的查询参数(你可以用[QSA,L]FLAG保存最初的查询变量)b).在文件名后面加一个“?”(比如index.php?)。符号“?”不会在浏览器的地址栏里显示。11.用新的格式展示当前URI如果这就是我们当前正在运行的URLs:/index.php?id=nnnn。我们非常希望将其更改成/nnnn并且让搜索引擎以新格式展现。首先,我们为了让搜索引擎更新成新的,得将旧的URLs重定向到新的格式,但是,我们还得保证以前的index.php照样能够运行。是不是被我搞迷糊了?实现以上功能,诀窍就在于在查询变量中加了一个访问者看不到的标记符“marker”。我们只将查询变量中没有出现“marker”标记的链接进行重定向,然后将原有的链接替换成新的格式,并且通过[QSA]FLAG在已有的参数加一个“marker”标记。以下为实现的方式:RewriteCond %{QUERY_STRING} !markerRewriteCond %{QUERY_STRING} id=([-a-zA-Z0-9_+]+)RewriteRule ^/?index\.php$ %1? [R=301,L]RewriteRule ^/?([-a-zA-Z0-9_+]+)$ index.php?marker &id=$1 [L]这里,原先的URL:http://www.example.com/index.php?id=nnnn,不包含marker,所以被第一个规则永久重定向到http://www.example.com/nnnn,第二个规则将http://www.example.com/nnnn反定向到http://www.example.com/index.php?marker&id=nnnn,并且加了marker以及id=nnnn两个变量,最后mod_rewrite就开始进行处理过程。第二次匹配,marker被匹配,所以忽略第一条规则,这里有一个“.”字符会出现在http://www.example.com/index.php?marker &id=nnnn中,所以第二条规则也会被忽略,这样我们就完成了。注意,这个解决方案要求Apache的一些扩展功能,所以如果你的网站放于在共享主机中会遇到很多障碍。12.保证安全服务启用Apache可以用两种方法辨别你是否开启了安全服务,分别引用{HTTPS}和{SERVER_PORT}变量:RewriteCond %{REQUEST_URI} ^secure_page\.php$RewriteCond %{HTTPS} !onRewriteRule ^/?(secure_page\.php)$ https://www.example.com/$1 [R=301,L]以上规则测试{REQUEST_URI}值是否等于我们的安全页代码,并且{HTTPS}不等于on。如果这两个条件同时满足,请求将被重定向到安全服务URI.另外你可用{SERVER_PORT}做同样的测试,443是常用的安全服务端口RewriteCond %{REQUEST_URI} ^secure_page\.php$RewriteCond %{SERVER_PORT} !^443$RewriteRule ^/?(secure_page\.php)$ https://www.example.com/$1 [R=301,L]13.在特定的页面上强制执行安全服务遇到同一个服务器根目录下分别有一个安全服务域名和一个非安全服务域名,所以你就需要用RewriteCond 判断安全服务端口是否占用,并且只将以下列表的页面要求为安全服务:RewriteCond %{SERVER_PORT} !^443$RewriteRule ^/?(page1|page2|page3|page4|page5)$ https://www.example.com/%1[R=301,L]以下是怎样将没有设置成安全服务的页面返回到80端口:RewriteCond %{ SERVER_PORT } ^443$RewriteRule !^/?(page6|page7|page8|page9)$http://www.example.com%{REQUEST_URI} [R=301,L]

htaccess设置

开启expires模块,a2enmod expires然后在.htaccess文件中添加以下内容:

########## Begin - ETag Optimization## This rule will create an ETag for files based only on the modification## timestamp and their size. ## Note: It may cause problems on your server and you may need to remove itFileETag MTime Size# AddOutputFilterByType is now deprecated by Apache. Use mod_filter in the future.AddOutputFilterByType DEFLATE text/plain text/html text/xml text/css application/xml application/xhtml+xml application/rss+xml application/javascript application/x-javascript# Enable expiration controlExpiresActive On# Default expiration: 1 hour after requestExpiresDefault "now plus 1 hour"# CSS and JS expiration: 1 week after requestExpiresByType text/css "now plus 1 week"ExpiresByType application/javascript "now plus 1 week"ExpiresByType application/x-javascript "now plus 1 week"# Image files expiration: 1 month after requestExpiresByType image/bmp "now plus 1 month"ExpiresByType image/gif "now plus 1 month"ExpiresByType image/jpeg "now plus 1 month"ExpiresByType image/jp2 "now plus 1 month"ExpiresByType image/pipeg "now plus 1 month"ExpiresByType image/png "now plus 1 month"ExpiresByType image/svg+xml "now plus 1 month"ExpiresByType image/tiff "now plus 1 month"ExpiresByType image/vnd.microsoft.icon "now plus 1 month"ExpiresByType image/x-icon "now plus 1 month"ExpiresByType image/ico "now plus 1 month"ExpiresByType image/icon "now plus 1 month"ExpiresByType text/ico "now plus 1 month"ExpiresByType application/ico "now plus 1 month"ExpiresByType image/vnd.wap.wbmp "now plus 1 month"ExpiresByType application/vnd.wap.wbxml "now plus 1 month"ExpiresByType application/smil "now plus 1 month"# Audio files expiration: 1 month after requestExpiresByType audio/basic "now plus 1 month"ExpiresByType audio/mid "now plus 1 month"ExpiresByType audio/midi "now plus 1 month"ExpiresByType audio/mpeg "now plus 1 month"ExpiresByType audio/x-aiff "now plus 1 month"ExpiresByType audio/x-mpegurl "now plus 1 month"ExpiresByType audio/x-pn-realaudio "now plus 1 month"ExpiresByType audio/x-wav "now plus 1 month"# Movie files expiration: 1 month after requestExpiresByType application/x-shockwave-flash "now plus 1 month"ExpiresByType x-world/x-vrml "now plus 1 month"ExpiresByType video/x-msvideo "now plus 1 month"ExpiresByType video/mpeg "now plus 1 month"ExpiresByType video/mp4 "now plus 1 month"ExpiresByType video/quicktime "now plus 1 month"ExpiresByType video/x-la-asf "now plus 1 month"ExpiresByType video/x-ms-asf "now plus 1 month"					

Ubuntu(Linux) 下 unzip 命令使用详解

1.功能作用:解压缩zip文件2.位置:/usr/bin/unzip3.格式用法:unzip [-Z] [-opts[modifiers]] file[.zip] [list] [-x xlist] [-d exdir]4.主要参数

  • -c 将解压缩的结果显示到屏幕上,并对字符做适当的转换
  • -p 与-c参数类似,会将解压缩的结果显示到屏幕上,但不会执行任何的转换。
  • -l 显示压缩文件内所包含的文件
  • -f 更新现有的文件
  • -t 检查压缩文件是否正确,但不解压
  • -u 与-f参数类似,但是除了更新现有的文件外,也会将压缩文件中的其他文件解压缩到目录中
  • -z 仅显示压缩文件的备注文字
  • -v 执行是时显示详细的信息。或查看压缩文件目录,但不解压
  • -T 将压缩文件内的所有文件的最新变动时间设为解压缩时候的时间
  • -x 指定不要处理.zip压缩文件中的哪些文件
  • -d 指定文件解压缩后所要存储的目录
  • -n 解压缩时不要覆盖原有的文件
  • -q 安静模式,执行时不显示任何信息
  • -o 不必先询问用户,unzip执行后覆盖原有文件
  • -a 对文本文件进行必要的字符转换
  • -j 不处理压缩文件中原有的目录路径
  • -aa 把所有的文件目录当作文本处理
  • -U use escapes for all non-ASCII Unicode
  • -UU 忽略Unicode编码字符
  • -C 压缩文件中的文件名称区分大小写
  • -L 将压缩文件中的全部文件名改为小写
  • -X 解压缩时同时回存文件原来的UID/GID
  • -V 保留VMS的文件版本信息
  • -K 保留文件的setuid/setgid/tacky属性
  • -M 将输出结果送到more程序处理
  • -O 指定字符编码为DOS,Windows和OS/2
  • -I 指定字符编码为UNIX
5.应用实例1、把文件解压到当前目录下
unzip test.zip
2、如果要把文件解压到指定的目录下,需要用到-d参数。
unzip -d /temp test.zip
3、解压的时候,有时候不想覆盖已经存在的文件,那么可以加上-n参数
unzip -n test.zipunzip -n -d /temp test.zip
4、只看一下zip压缩包中包含哪些文件,不进行解压缩
unzip -l test.zip
5、查看显示的文件列表还包含压缩比率
unzip -v test.zip
6、检查zip文件是否损坏
unzip -t test.zip
7、将压缩文件test.zip在指定目录tmp下解压缩,如果已有相同的文件存在,要求unzip命令覆盖原先的文件
unzip -o test.zip -d /tmp/

WordPress图片本地化插件

强烈推荐这个插件,可以省事地把外部图片进行本地化,一键就可以把所有图片下载到你的博客里,非常方便。

如果你同时安装了水印插件,图片也会自动加上水印的。 安装:在后台搜索Hacklog Remote Image Autosave,安装好启用即可 或者戳这里下载。安装好后,文章编辑器里面会有蓝色按钮,点击就可以远程下载图片到本地了。

How to Install a LAMP Stack on Ubuntu 14.04

Before You Begin

  1. Ensure that you have followed the Getting Started and Securing Your Server guides, and the Linode’s hostname is set.To check your hostname run:
    12
    hostnamehostname -f
    The first command should show your short hostname, and the second should show your fully qualified domain name (FQDN).
  2. Update your system:
    1
    sudo apt-get update && sudo apt-get upgrade

Install and Configure Apache

  1. Install Apache 2.4:
    1
    sudo apt-get install apache2
  2. Edit the main Apache configuration file, apache2.conf, to adjust the KeepAlive setting:
    /etc/apache2/apache2.conf
    1
    KeepAlive Off
  3. The default multi-processing module (MPM) for Apache is the event module, but by default PHP uses the prefork module. Open the mpm_prefork.conf file located in/etc/apache2/mods-available and edit the configuration. Below is the suggested values for a 1GB Linode:
    /etc/apache2/mods-available/mpm_prefork.conf
    1234567
    <IfModule mpm_prefork_module>        StartServers            2        MinSpareServers         6        MaxSpareServers         12        MaxRequestWorkers       39        MaxConnectionsPerChild  3000</IfModule>
  4. Disable the event module and enable prefork:
    12
    sudo a2dismod mpm_eventsudo a2enmod mpm_prefork
  5. Restart Apache:
    1
    sudo service apache2 restart

Configure Virtual Hosts

There are several different ways to set up virtual hosts; however, below is the recommended method. By default, Apache listens on all IP addresses available to it.
  1. Within the /etc/apache2/sites-available/ directory, create a configuration file for your website,example.com.conf, replacing example.com with your own domain information:
    /etc/apache2/sites-available/example.com.conf
    1234567891011
    <VirtualHost *:80>      ServerAdmin This email address is being protected from spambots. You need JavaScript enabled to view it.     ServerName example.com     ServerAlias www.example.com     DocumentRoot /var/www/html/example.com/public_html/     ErrorLog /var/www/html/example.com/logs/error.log      CustomLog /var/www/html/example.com/logs/access.log combined     <Directory /path/to/public/website/>        Options -Indexes +FollowSymLinks        Require all granted     </Directory></VirtualHost>
    The ErrorLog and CustomLog entries are suggested for more fine-grained logging, but are not required. If they are defined (as shown above), the logs directories must be created before you restart Apache.
  2. Create the above-referenced directories:
    12
    sudo mkdir -p /var/www/html/example.com/public_htmlsudo mkdir /var/www/html/example.com/logs
  3. Link your virtual host file from the sites-available directory to the sites-enabled directory:
    1
    sudo a2ensite example.com.conf
    If you later need to disable your website, run:
    1
    a2dissite example.com.conf
  4. Reload Apache:
    1
    sudo service apache2 reload
    Assuming that you have configured the DNS for your domain to point to your Linode’s IP address, virtual hosting for your domain should now work.If there are additional websites you wish to add to your Linode repeat the above steps to add them.

Install and Configure MySQL

  1. Install the mysql-server package:
    1
    sudo apt-get install mysql-server 
    Choose a secure password when prompted.
  2. Run mysql_secure_installation, a program that helps secure MySQL. You will be presented with the opportunity to change the MySQL root password, remove anonymous user accounts, disable root logins outside of localhost, and remove test databases:
    1
    mysql_secure_installation

Create a MySQL Database

  1. Log into MySQL:
    1
    mysql -u root -p 
    Enter MySQL’s root password, and you’ll be presented with a MySQL prompt.
  2. Create a database and a user with permissions for it. In this example the databse is calledwebdata, the user webuser and password password:
    12
    create database webdata; grant all on webdata.* to 'webuser' identified by 'password'; 
  3. Exit MySQL:
    1
    quit 

Install and Configure PHP

  1. Install PHP, and the PHP Extension and Application Repository:
    1
    sudo apt-get install php5 php-pear
    If you need MySQL support also install php5-mysql
    1
    sudo apt-get install php5-mysql
  2. Once PHP5 is installed, tune the configuration file located in /etc/php5/apache2/php.ini to enable more descriptive errors, logging, and better performance. The following modifications provide a good starting point:
    /etc/php5/apache2/php.ini
    123
    error_reporting = E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERRORerror_log = /var/log/php/error.logmax_input_time = 30
    Ensure the lines above are uncommented. Commented lines begin with a semicolon (;).
  3. Create the log directory for PHP and give the Apache user ownership:
    12
    sudo mkdir /var/log/phpsudo chown www-data /var/log/php
  4. Reload Apache:
    1
    sudo service apache2 reload
Congratulations! You have now set up and configured a LAMP stack.

CentOS 安装LNMP环境

阿里云的云服务器(ECS)可以选择多种操作系统,打算用它运行 Drupal 或者 WordPress ,你最好选择 Linux 系统,这篇文章的演示是基于阿里云的 CentOS 操作系统的服务器。我们在上面搭建一个 nginx + mysql + php-fpm 的环境,这就是常说的 LNMP 。我们不过多解释什么是什么,而是着重讲流程与方法,想了解具体的细节,去搜索下吧:)这个手册是在阿里云上测试的,不过应该也适用于其它使用 CentOS 系统的服务器。

背景

宁皓网的《 CentOS:在阿里云上运行网站 》这个课程里面演示了在阿里云服务器上搭建 AMP 环境,也就是 Apache + MySQL + PHP,并且介绍了 Linux 系统的基本的操作,还有文件目录权限的问题。这些非常重要,可以先看看。这次想用 Nginx 代替 Apache 服务器,宁皓网现在用的是 Apache 服务器,最近出了点问题。所以想更换服务器的系统,并且把 Web Server 换成 Nginx。顺便也去学习一下环境的优化,还有打算把 memcache 也用上,也可能会加上 varnish ,我会把整个过程写下来与大伙分享。下面开始第一步,创建一个阿里云服务器的实例。

创建服务器实例

创建一个服务器实例其实就是去购买一台相应配置的云服务器。注册并登录到阿里云的网站,在 产品服务 里选择 云服务器 ECS ,点击页面上的 立即购买。可以 包年包月 的购买,也可以 按量付费,也就是用多少花多少,不过这种方式不支持网站的备案。确定后,可以按需要去配置服务器,建议最初可以选择最低配置,因为后续升级也非常容易。选择 CPU,内存,带宽,不同的配置价格不同。你还要选择 地域 ,也就是云服务器所在的地方,目前只有 青岛 与 杭州。再去选择操作系统,这篇文章所做的测试用的是 CentOS 6.3 64 位。需要的话可以再增加一块数据盘,默认会带一个系统盘,一共 20 G ,足够我们测试用了。aliyun-05点击 立即购买,预览一下所选的服务器,然后 提交订单aliyun-01选择支付方式,然后点击 确认支付aliyun-02注意支付以后,可能会等一小会儿订单才能生效。至少我是等了一会儿,也可能是因为我用的手机版的支付宝。支付成功以后,打开你的个人账户页面,选择 管理控制台,在这里,你可以找到购买的云服务器。云服务器默认的 root(超级管理员) 用户的密码,会发送到你的手机上,你也可以点击 修改密码,去修改 root 用户密码。在这个界面,你还可以 停止  或 重启 去服务器。也可以找到你的服务器的公众的 IP 地址。我购买的这台服务器地址是 218.244.147.196,使用这个地址配合 root 用户和密码,你可以使用工具登录到服务器,对它进行远程管理,比如安装软件,修改设置,重启服务等等。aliyun-04

远程控制你的服务器

远程控制 Linux 类型的系统的服务器,比如 CentOS 系统的服务器,一般不像 Windows 服务器那样,使用图形界面的远程控制。我们需要使用命令行工具,远程连接到服务器,然后使用命令去控制服务器。Windows 用户可以使用 Putty ,Mac 用户可以使用系统自带的终端工具。然后用 ssh 命令,连接到你的服务器。像这样:
ssh This email address is being protected from spambots. You need JavaScript enabled to view it.
@ 左边的 root 是连接时使用的用户的名字,@ 右边的数字是你的服务器的 IP 地址。这行命令的意思就是,使用 root 用户,登录到 218.244.147.196 这台服务器上。回车以后,会提示你输入 root 用户的密码(这个密码阿里云会发送到你手机上)。

安装 Nginx

想在 CentOS 系统上安装 Nginx ,你得先去添加一个资源库,像这样:
vim /etc/yum.repos.d/nginx.repo
使用 vim 命令去打开 /etc/yum.repos.d/nginx.repo ,如果 nginx.repo 不存在,就会去创建一个这样的文件,打开以后按一下小 i 键,进入编辑模式,然后复制粘贴下面这几行代码,完成以后按 esc 键退出,再输入 :wq (保存并退出)
[nginx]name=nginx repobaseurl=http://nginx.org/packages/centos/$releasever/$basearch/gpgcheck=0enabled=1
完成以后,我们就可以使用 yum 命令去安装 nginx 了,像这样:
yum install nginx
安装好以后测试一下 nginx 服务:
service nginx status
应该会返回:
nginx is stopped (nginx 已停止)
再测试一下 nginx 的配置文件:
nginx -t
应该会返回:
nginx: the configuration file /etc/nginx/nginx.conf syntax is oknginx: configuration file /etc/nginx/nginx.conf test is successful
... syntax is ok,... test is successful,说明配置文件没问题,同时这个结果里你可以找到 nginx 的配置文件 nginx.conf 所在的位置。操纵 nginx 服务操纵服务,可以使用使用 service 命令,它可以启动(start),重启(restart),或停止服务(stop),比如要启动 nginx 服务:
service nginx start
服务启动以后,你就可以在浏览器上使用服务器的 IP 地址,或者指向这个地址的域名访问服务器指定的目录了。你会看到类似下面的这些文字。

Welcome to nginx! If you see this page, the nginx web server is successfully installed and working. Further configuration is required. For online documentation and support please refer to nginx.org. Commercial support is available at nginx.com. Thank you for using nginx.

配置 nginx 虚拟主机

安装完 nginx 以后,第一件想到的事应该就是去创建虚拟主机,虚拟主机允许我们在同一台服务器上运行多个网站,我们可以为不同的域名绑定不同的目录,访问这个域名的时候,会打开对应目录里面的东西。之前介绍过为 Apache 服务器创建虚拟主机,下面来看一下为 nginx 配置虚拟主机。先进入到 nginx 配置文件目录:
cd /etc/nginx/conf.d
复制这个目录里的 default.conf ,复制以后的名字可以使用你的虚拟主机名字。比如创建一个 nginx.ninghao.net 的虚拟主机。复制文件可以使用 cp 命令,像这样:
cp default.conf nginx.ninghao.net.conf
再去编辑一下这个复制以后的配置文件,可以使用 vim 命令:
vim nginx.ninghao.net.conf
你会看到像这样的代码:
server { listen 80; server_name localhost; #charset koi8-r; #access_log   /var/log/nginx/log/host.access.log main; location / { root /usr/share/nginx/html; index index.html index.htm;}...}
server_name 就是主机名,也就是跟这个虚拟主机绑定在一块儿的域名,我事先把 nginx.ninghao.net 指向了服务器,这个虚拟主机就是为它准备的,所以,server_name 后面的东西就是 nginx.ninghao.net 。紧接着 server_name 下面可以是一个root,就是这个虚拟主机的根目录,也就是网站所在的目录。比如我们要把 nginx.ninghao.net 这个网站的文件放在/home/www/nginx.ninghao.net 下面,那么这个 root 就是这个路径。然后去掉 location / 里面的 root 这行代码。再在 index 后面加上一种索引文件名,也就是默认打开的文件,这里要加上一个 index.php ,这样访问 nginx.ninghao.net 就可以直接打开 root 目录下面的 index.php 了。稍后我们再去安装 php 。修改之后,看起来像这样:
server { listen 80; server_name nginx.ninghao.net; root /home/www/nginx.ninghao.net; #charset koi8-r; #access_log /var/log/nginx/log/host.access.log main; location / { index index.php index.html index.htm; }...}
这个配置文件先修改到这,稍后,我们再回来继续修改一下它。保存一下,按 esc ,输入 :wp(保存并退出)。现在虚拟主机应该就可以使用了。主机的域名是 nginx.ninghao.net,访问它的时候,打开的是 /home/www/nginx.ninghao.net 这个目录里面的东西,你可以在这个目录下放点东西。重启 nginx 或者重新加载 nginx 可以让配置文件生效。
service nginx reload
现在,打开浏览器,输入你为虚拟主机设置的域名,看看是否能打开你指定的目录里的东西。

配置 php-fpm

要让 nginx 能够执行 php 文件,需要去安装一下 php-fpm,它直接包含在了 CentOS 资源库里,所以直接使用 yum 命令可以安装它:
yum install php-fpm
完成以后,可以检查一下 php-fpm 的运行状态,使用 service 命令:
service php-fpm status
返回:
php-fpm is stopped(php-fpm 已停止)
启动 php-fpm 同样可以使用 service 命令:
service php-fpm start

让 nginx 可以执行 php

现在我们应该就可以让 nginx 去执行 php 了。不过你需要修改一下 nginx 的配置文件,之前我们在配置虚拟主机的时候,创建了一个 nginx.ninghao.net.conf 的配置文件,需要去修改下 nginx 的这个配置文件,才能去执行 php 。使用 vim 命令去编辑它:
vim /etc/nginx/conf.d/nginx.ninghao.net.conf
注意你的配置文件不一定叫 nginx.ninghao.net.conf,应该是你自己命名的配置文件。打开以后,找到下面这段字样的代码:
    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000    #    #location ~ \.php$ {    #    root           html;    #    fastcgi_pass   127.0.0.1:9000;    #    fastcgi_index  index.php;    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;    #    include        fastcgi_params;    #}
这是 nginx 默认给我们的用来执行 php 的配置,从 location 开始取消注释,会让这个配置生效,然后我们还得简单去修改一下:
    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000    #    location ~ \.php$ {    #   root           html;        fastcgi_pass   127.0.0.1:9000;        fastcgi_index  index.php;        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;        include        fastcgi_params;    }
注意 root 那里仍然是被注释掉的,还有 SCRIPT_FILENAME 后面修改了一下,把 /scripts 换成了 $document_root 。保存并退出。然后重新启动 nginx:
service nginx restart

测试是否可以执行 php

现在,我们已经安装了 php-fpm,并修改了 nginx 的配置文件让它可以去执行 php,下面,我们得去测试一下,可以使用 php 的 phpinfo(); 函数,方法是在你的虚拟主机根目录下面,创建一个 php 文件,命名为 phpinfo.php,然后在这个文件里输入:
<?php phpinfo(); ?>
保存文件并退出。在浏览器里打开刚才创建的这个 php 文件。我这里应该是 http://nginx.ninghao.net/phpinfo.php。打开以后,你应该能看到像下面这样的界面,如果能,说明 nginx 已经可以执行 php 了。QQ20140322-4

为系统添加资源库

前面我们使用 yum 命令去安装了一些东西,用起来很简单,yum + 要安装的东西 + install。它其实是一个资源包的管理工具,用它安装东西的时候,会检查这个东西所依赖的其它的东西,在安装的同时,也会去安装这些被依赖的东西。CentOS 本身带了一些资源库,但并不是所有的东西都在这些资源库里,所以,我们可以给系统手工的添加一些资源库,这样使用 yum 命令,就可以很方便的去安装在资源库里的东西了。在这里可以找到可用的资源库:http://iuscommunity.org/pages/Repos.html ,你要根据自己的系统的版本去下载对应的资源库,然后安装在系统里面。查看系统的版本可以这样做:
cat /etc/redhat-release
我这里使用的是 CentOS 系统,所以返回了:
CentOS release 6.3 (Final)
说明我用的是 CentOS 6 ,并且是 64 位的,打开上面的资源库地址,找到 Release Packages ,然后找到 CentOS 6 这个区域下面的链接,我们用这个 epel 资源库。打开这个地址以后,复制 Packages 下面的链接 epel-release-6-5.noarch 。然后回到我们连接到服务器的终端工具,Windows 用户应该用的是 putty 。用 cd 命令进入到一个目录里面,比如用户的根目录,可以这样:
cd ~
然后使用 wget 命令,把刚才复制的链接里的资源库下载下来:
wget http://dl.iuscommunity.org/pub/ius/stable/CentOS/6/x86_64/epel-release-6-5.noarch.rpm
ls 命令可以查看一下当前这个目录下面的东西,你应该可以看到 epel-release-6-5.noarch.rpm(也或者是你选择要下载的资源库)。下载好以后,去安装一下:
rpm -ivh epel-release-6-5.noarch.rpm
查看一下系统里面的资源库:
yum repolist
你会看到 epel 这个资源库,它就是我们刚才安装的。系统里的资源库地址是在:/etc/yum.repos.d,在这里,你同样可以找到 epel.repo。这样我们就可以使用 yum 命令去安装更多的东西了。

安装 mysql

mysql 可以管理网站用到的数据库,WordPress 和 Drupal 也都支持 mysql 数据库。所以我们的 Web 运行环境里,需要安装一个 mysql 。之前我们已经添加了资源库,所以可以直接使用 yum 命令去安装  mysql :
yum install mysql-server
安装完成后,使用 service 命令启动 mysql 服务:
service mysqld start
然后我们需要简单配置一下 mysql ,默认安装以后 mysql 的 root 用户是没有密码的,对于生产环境来说,这肯定是不行的,另外还有一些安全相关的设置,可以使用下面这行命令去配置一下,它是一个向导,问你一些问题,你要给出答案,比如是否要设置 root 用户的密码, 密码是什么等等。
mysql_secure_installation
Enter current password for root (enter for none):解释:输入当前 root 用户密码,默认为空,直接回车。Set root password? [Y/n]  y解释:要设置 root 密码吗?输入 y 表示愿意。Remove anonymous users? [Y/n]  y解释:要移除掉匿名用户吗?输入 y 表示愿意。Disallow root login remotely? [Y/n]  y解释:不想让 root 远程登陆吗?输入 y 表示愿意。Remove test database and access to it? [Y/n]  y解释:要去掉 test 数据库吗?输入 y 表示愿意。Reload privilege tables now? [Y/n]  y解释:想要重新加载权限吗?输入 y 表示愿意。

安装 php 扩展

现在,我们有了可以提供 web 服务的 nginx ,并且安装了 php-fpm ,配置了 nginx 可以让它去执行 php ,也安装了数据库管理系统。不过在运行真正的网站的时候,我们还需要为 php 安装一些额外的扩展,比如 处理 mysql 数据库的 mysql 扩展,缓存功能的 apc 扩展,处理图像的 gd 扩展等等。安装它们同样可以使用 yum 命令。
yum install php-pecl-apc php-mysql php-gd php-mcrypt php-pear php-mbstring php-xmlrpc php-dom
上面安装了一些 php 的扩展,如果你发现在安装网站的时候提示需要安装其它的扩展,同样可以使用 yum 命令去安装。安装完成以后,需要重启一下 php-fpm :
service php-fpm restart

目录与文件的权限问题

网站上面有些目录或文件需要有写入权限,这样你得为这些目录和文件分配合适的权限,一般可以把它们的拥有者设置成 php 和 nginx 使用的用户,默认 nginx 的用户就是 nginx ,而 php-fpm 使用的用户默认是 apache。我们可以把它们改成一个统一的用户,可以修改 php-fpm 的用户为 nginx 。你可以使用下面的命令去查看一下 nginx 和 php-fpm 所使用的用户名:
ps aux|grep phpps aux|grep nginx
修改所使用的用户,可以通过使用 nginx 和 php-fpm 的配置文件,nginx 的配置文件是:  /etc/nginx/nginx.conf ,php-fpm 的配置文件是:/etc/php-fpm.conf,还有在 /etc/php-fpm.d/* 这个目录里的所有文件都是 php-fpm 的配置文件。默认这个目录里有一个 www.conf ,你可以编辑这个文件来修改 php-fpm 所使用的用户名称。使用 vim 命令:
vim /etc/php-fpm.d/www.conf
打开文件以后你可以搜索下关键词 userapache,输入 :/user :/apache ,会搜索到结果,按小 n 可以继续向下查找,按大 N 可以向上查找。直到你看到:
user = apache
把它修改成:
user=nginx
esc 退出,再输入 :wq ,重启下 php-fpm,这样我们的 nginx 服务器还有 php-fpm 会使用同一个用户:nginx,你可以把要可以有写入权限的目录与文件的拥有者修改成 nginx 就行了。可以使用 chown 命令:
chown -R nginx 目录名/文件名

总结

好来,现在我们就已经拥有一台 LNMP 环境的服务器了。这个操作手册里提供到的相关配置,还有很多可以优化一下,比如 nginx 的配置文件,可以针对 Drupal 来做一些优化。在后续的文章里面,我会再详细的去解释一下这些配置文件的使用。