-
清理系统服务
可以关闭不必要的系统服务,linux下常用chkconfig,在ubuntu系统上最常用sysv-rc-conf,界面更友好使用更方便,直接通过源安装即可运行。
sudo apt-get install sysv-rc-conf sudo sysv-rc-conf
通过软件可以发现,Linode提供的系统已经关闭了很多不必要的服务,但是系统自带了apache,直接取消选择关闭即可。
-
nginx过期设置
在nginx中,可以对部分类型资源配置过期时间,以利用客户端缓存,降低服务器端负载,某些媒体资源可以禁用log。
在对应的nginx配置文件youdomain.com中添加
location ~* ^.+\.(gif|jpg|jpeg|png|bmp|ico|swf)$ { root /home/myname/wwwroot/yourdomain.com; access_log off; expires 7d; } location ~* ^.+\.(js|css)$ { root /home/myname/wwwroot/yourdomain.com; expires 24h; }
-
wordpress静态化
cos-html-cache是WP的静态化插件,他可以将WP通过UrlRewrite优化过的Url链接彻底静态化。你只需要在WP后台设置固定链接为某种静态文件类似的形式(例如/archives/%post_id%.html),你就可以使用该插件生成对应的静态文件,从此用户将直接访问此静态文件,而不必再通过php解释,极大提高运行效率。
具体操作上面链接描述很详细,无需赘述。
不过我在启用此插件后,发现能正常生成网站根目录下index.html,但无法生成/archives/%post_id%.html。我写了一个php脚本放在网站根目录下测试,也无法在/archives目录下生成文件,提示找不到该目录。在cos-html-cache源文件中可以找到,生成html文件的脚本,路径信息是通过$_SERVER[“DOCUMENT_ROOT”]获取的,但是尝试打印该值发现无值。最后我发现必须在Nginx站点配置文件中在php-fast-cgi的配置项里增加网站的root路径如下
location / { root /home/myname/wwwroot/yourdomain.com; index index.html index.htm index.php; if (-f $request_filename) { break; } if (-d $request_filename) { break; } rewrite ^(.+)$ /index.php?q=$1 last; } location ~ \.php$ { #必须定义root ----------------------------------------- root /home/myname/wwwroot/yourdomain.com; #------------------------------------------------------ fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /home/myname/wwwroot/yourdomain.com$fastcgi_script_name; include /usr/local/nginx/conf/fastcgi_params; }
如果不添加该root信息,在php中则无法正确获取$_SERVER[“DOCUMENT_ROOT”]参数,会导致路径定位错误。不过按照一般逻辑,这个应该是继承前面的root设置,不必重复定义。也许是因为fastcgi是从nginx转向到另一个新的进程的缘故,所以需要具体定义参数传递。不过nginx应该自动获取该值,避免重复手工操作。
nginx
nginx 标签中有 3 篇文章
Setup on Linode.com with ubuntu+nginx+php+fastcgi+mysql 续
嗯嗯,继续。
-
nginx和fastcgi启动配置
2个配置文件,放于/etc/init.d下面。
cd /etc/init.d touch fast-cgi touch nginx sudo chmod +x /etc/init.d/nginx /etc/init.d/fast-cgi
nginx
#! /bin/sh ### BEGIN INIT INFO # Provides: nginx # Required-Start: $all # Required-Stop: $all # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: starts the nginx web server # Description: starts nginx using start-stop-daemon ### END INIT INFO PATH=/usr/local/nginx/sbin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin DAEMON=/usr/local/nginx/sbin/nginx NAME=nginx DESC=nginx test -x $DAEMON || exit 0 # Include nginx defaults if available if [ -f /etc/default/nginx ] ; then . /etc/default/nginx fi set -e . /lib/lsb/init-functions test_nginx_config() { if nginx -t then return 0 else return $? fi } case "$1" in start) echo -n "Starting $DESC: " test_nginx_config start-stop-daemon --start --quiet --pidfile /var/run/$NAME.pid \ --exec $DAEMON -- $DAEMON_OPTS || true echo "$NAME." ;; stop) echo -n "Stopping $DESC: " start-stop-daemon --stop --quiet --pidfile /var/run/$NAME.pid \ --exec $DAEMON || true echo "$NAME." ;; restart|force-reload) echo -n "Restarting $DESC: " start-stop-daemon --stop --quiet --pidfile \ /var/run/$NAME.pid --exec $DAEMON || true sleep 1 test_nginx_config start-stop-daemon --start --quiet --pidfile \ /var/run/$NAME.pid --exec $DAEMON -- $DAEMON_OPTS || true echo "$NAME." ;; reload) echo -n "Reloading $DESC configuration: " test_nginx_config start-stop-daemon --stop --signal HUP --quiet --pidfile /var/run/$NAME.pid \ --exec $DAEMON || true echo "$NAME." ;; configtest) echo -n "Testing $DESC configuration: " if test_nginx_config then echo "$NAME." else exit $? fi ;; status) status_of_proc -p /var/run/$NAME.pid "$DAEMON" nginx && exit 0 || exit $? ;; *) echo "Usage: $NAME {start|stop|restart|reload|force-reload|status|configtest}" >&2 exit 1 ;; esac exit 0
fast-cgi
#! /bin/sh ### BEGIN INIT INFO # Provides: fast-cgi # Required-Start: $all # Required-Stop: $all # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: starts the fast-cgi web server # Description: starts fastcgi using start-stop-daemon ### END INIT INFO PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin NAME=spawn-fcgi DESC=spawn-fcgi DAEMON=/usr/local/bin/spawn-fcgi DAEMON_OPTS="-u www-data -g www-data -C 8 -a 127.0.0.1 -p 9000 -P /var/run/$NAME.pid -- /usr/bin/php5-cgi" test -x $DAEMON || exit 0 set -e case "$1" in start) echo -n "Starting $DESC: " start-stop-daemon --start --quiet --pidfile /var/run/$NAME.pid --exec $DAEMON -- $DAEMON_OPTS || true echo "$NAME." ;; stop) echo -n "Stopping $DESC: " start-stop-daemon --stop --quiet --pidfile /var/run/$NAME.pid --exec $DAEMON || true echo "$NAME." ;; restart|force-reload) echo -n "Restarting $DESC: " start-stop-daemon --stop --quiet --pidfile /var/run/$NAME.pid --exec $DAEMON || true sleep 1 start-stop-daemon --start --quiet --pidfile /var/run/$NAME.pid --exec $DAEMON -- $DAEMON_OPTS || true echo "$NAME." ;; reload) echo -n "Reloading $DESC configuration: " start-stop-daemon --stop --signal HUP --quiet --pidfile /var/run/$NAME.pid --exec $DAEMON || true echo "$NAME." ;; *) N=/etc/init.d/$NAME echo "Usage: $N {start|stop|restart|reload|force-reload}" >&2 exit 1 ;; esac exit 0
这两个脚本需要注意的是目录的定位,如果在编译阶段加入了目录设置的参数,那么你同时需要在这里修改定义。另外fast-cgi需要注意DAEMON_OPTS的参数设置。
这2个脚本都有一个同样的问题,就是无法正常停止服务。我虽然不太了解shell程序,但是根据我其他编程经验,两个脚本都是通过start-stop-daemon命令来开启和停止服务。但我使用的情况是可以正常开启,但无法正常关闭。所以我不得不写了一个简单的关闭并重启nginx服务的脚本,是通过直接kill进程来实现的。
cd ~ mkdir tools cd tools touch reset_nginx chmod +x reset_nginx
reset_nginx内容
sudo kill `cat /usr/local/nginx/logs/nginx.pid` sudo /etc/init.d/nginx start
但是fast-cgi的服务即使我kill进程并删除pid文件也无济于事,fast-cgi仍然照常运行……这有点不合逻辑,也许我操作错误,或者是权限问题。不过fast-cgi开启后一般也没有必要进行重启或其他操作,这个问题留待以后解决吧。或者有哪位同学知道的,请不吝赐教!
最后这2个脚本需要注册为系统服务,需要安装rcconf。
sudo apt-get install rcconf sudo rcconf
嗯,很怀旧的DOS操作界面……呵呵,大家选择2个脚本,再ok退出即可。
-
nginx站点配置
由于dreamhost的习惯,并且这个虚拟机还要放callaly的blog(http://callaly.net),所以nginx的站点我放到用户目录下去了。
cd ~ mkdir wwwroot cd wwwroot mkdir yourdomain.com
编辑/usr/local/nginx/conf/nginx.conf
user www-data; worker_processes 2; events { worker_connections 1024; use epoll; } http { include mime.types; default_type application/octet-stream; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; gzip on; #设置默认站点,禁止所有IP访问 server { listen 80 default; return 403; } #包含其他站点配置 include /usr/local/nginx/sites-enabled/*; }
创建站点文件
cd /usr/local/nginx sudo mkdir sites-available sudo mkdir sites-enabled sudo touch sites-available/yourdomain.com sudo ln -s sites-available/yourdomain.com sites-enabled/yourdomain.com
编辑sites-available/yourdomain.com
server { listen 80; server_name www.yourdomain.com yourdomain.com; access_log /home/myname/wwwroot/log/yourdomain.com.access.log; error_log /home/myname/wwwroot/log/yourdomain.com.error.log; location / { root /home/myname/wwwroot/yourdomain.com; index index.html index.htm index.php; # WordPress URL优化 if (-f $request_filename) { break; } if (-d $request_filename) { break; } # WordPress URL重写,如果你的wp目录不在根目录,请修改路径 rewrite ^(.+)$ /index.php?q=$1 last; } location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /home/myname/wwwroot/yourdomain.com$fastcgi_script_name; include /usr/local/nginx/conf/fastcgi_params; } #如果前面编译nginx时添加了with-http_stub_status_module参数 #就可以通过此设置访问yourdomain.com/status(名称自定)查看站点状态 location /status { stub_status on; access_log off; } }
nginx的站点配置基本ok
-
wordpress备份和恢复
需要把dreamhost主机上的内容迁移过来,可操作方法很多,最好在服务器端直接操作,速度更快。文件操作很简单不赘述,关于数据库的备份和恢复简单说下。
#导出 - 在原服务器 mysqldump -h old_host -p old_dbname -u old_dbuser >wp_bak.sql #登录mysql mysql -h new_host -u new_dbuser #创建新数据库,注意编码 create database 'new_dbname' default character set utf8 collate utf8_general_ci; #导入 - 确保备份sql文件在当前目录 use new_dbname; source wp_bak.sql;
至此整个站点配置已经基本完成,可以敲域名访问了。
这篇文章大部分内容来自于网上,我东拼西凑来的,特在此列出供大家参考。
Setup on Linode.com with ubuntu+nginx+php+fastcgi+mysql
我对Linux系统还处于初入门阶段,在配置安装Linode VPS的服务过程中学到了不少东西,了解了不少概念,特记之。
-
启用
Linode的网站设计非常简洁,一个粗略认识英文的同学都可以轻易申请搞定,就不需要再介绍了。
在选择服务器网络物理位置的时候,Linode提供了一个下载测试列表供大家测试,你可以选择访问速度最优的位置。网上其它同学很多选择Fremont,不过我测试下来(杭州ADSL4M)Newark最快,浏览器单线程下载速度稳定达到300K+,所以我选择了Newark。估计各地网络不同有所区别,大家选用建议自行测试。
系统我选择的是ubuntu(嗯,已经提供9.10Server了),主要是出于我对ubuntu桌面版的使用习惯和偏爱。网上很多说法是ubuntu服务器版不够专业,不过我本来也不太够专业,也不知道ubuntu哪里不够专业,呵呵,也就无所谓了。
-
环境基本配置
在web面板开启虚拟机以后,你就可以通过root用户和密码在客户端(推荐putty)登录。登陆后第一件事情,增加一个新账号(用你的常用名 例如myname)。
adduser myname visudo
在该文件中增加以下行
myname ALL=(ALL) ALL
此操作使myname用户可以使用sudo命令,如果要给其他账号提供sudo操作权限,类推。
ok,exit命令退出putty登录再重启,通过myname账号和你设置的密码重新登录系统。Linode默认提供的ubuntu的源缺少一些开发包,所以我们先编辑一下源。
sudo vi /etc/apt/source.list
我们需要做的仅仅是将文件中已经注释掉的几行源去掉前面的“#”,重新开启即可——不需要为具体的源担心,默认的已经飞速了。然后我们需要刷新一下
sudo apt-get update
我习惯使用vim,所以先安一个
sudo apt-get install vim
我们还需要一个中文UTF的本地环境,不过这得看情况,也许你不需要?
sudo locale-gen zh_CN.UTF-8 sudo /usr/sbin/update-locale LANG=zh_CN.UTF-8
将服务器时间设置为上海时间
sudo cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
-
nginx+spawn-fastcgi+php+mysql
我们先来安一个编译包吧
sudo apt-get install build-essential
然后php和mysql安装最方便,直接从apt源安装即可
sudo apt-get -y install php5-common php5-mysql php5-sqlite php5-tidy php5-xmlrpc php5-xsl php5-cgi php5-mcrypt php5-curl php5-gd php5-memcache php5-mhash php5-pspell php5-sqlite libmagick9-dev php5-cli sudo apt-get install mysql-server mysql-client libmysqlclient15-dev
php的安装命令我是copy的,然后去掉了一些不必要的包,如果你觉得不必要也可以去掉,真正基本环境必须的只有php5 php5-cgi而已。mysql在安装过程中会让你设置root的密码,不要设置太简单了,也不要和系统root密码一样。
然后我们需要安装nginx
cd ~ mkdir source cd source wget http://sysoev.ru/nginx/nginx-0.7.64.tar.gz tar -zxvf nginx-0.7.64.tar.gz cd nginx-0.7.64 sudo apt-get install libssl-dev libpre3-dev zlib1g-dev ./configure --with-http_ssl_module --with-http_flv_module --with-http_gzip_static_module --with-md5-asm --with-md5=/usr/include --with-sha1-asm --with-sha1=/usr/include --with-http_stub_status_module make sudo make install
在configure的时候可以定义很多参数,官方的参考文档在这里。我在网上看的相关的文章,定义了很多路径的参数,也许有什么特别的理由或习惯需要特别定义,我不太了解,所以我都去掉了,就用默认的路径就好。nginx默认的安装路径是/usr/local/nginx,其中包含了配置、基本的html页面、log、站点设置等。with-md5-asm和with-sha1-asm官方wiki说只建议使用一种,不过只用一种我无法通过编译,不知道问题所在。另外with-http_stub_status_module可以开通nginx内置的状态统计功能,建议都配置上,后面会开启该功能。
然后我们来安装spawn-fcgi,这是lighttpd的fastcgi管理器,目前已经是独立项目了,当前最新版本是1.6.3。
cd ~/source wget http://www.lighttpd.net/download/spawn-fcgi-1.6.3.tar.gz tar -zxvf spawn-fcgi-1.6.3.tar.gz cd spawn-fcgi-1.6.3 sudo ./configure && make && make install
………
做的事情不多,要写清楚真累,太长了,休息下,明天再整理。