Address already in use: make_sock: could not bind to address [::]:80

httpd/Apache默认占用的是80端口,有时候你使用apache自带的重启脚本会出现

Address already in use: make_sock: could not bind to address [::]:80

Address already in use: make_sock: could not bind to address 0.0.0.0:80

no listening sockets available, shutting down

Unable to open logs

这会导致你的apache无法启动,你需要查找下你的机器看看是否有哪个线程已经占用了80端口。

netstat -lnp|grep 80

#tcp	0	0 0.0.0.0:80	0.0.0.0:*	LISTEN	13957/httpd

#查看该进程 (13957是动态的)
ps 13975

#结束该进程
kill -9 13975

#启动httpd/Apache
service httpd start

apache启动完毕。

Apache Prefork、Worker和Event三种MPM分析

 

前言

什么是MPM?

Apache 2.X支持插入式并行处理模块,称为多路处理模块(MPM)。在编译apache时必须选择也只能选择一个MPM,对类UNIX系统,有几个不同的MPM可供选择,它们会影响到apache的速度和可伸缩性。

Prefork MPM

这个多路处理模块(MPM)实现了一个非线程型的、预派生的web服务器,它的工作方式类似于Apache 1.3。它适合于没有线程安全库,需要避免线程兼容性问题的系统。它是要求将每个请求相互独立的情况下最好的MPM,这样若一个请求出现问题就不会影响到其他请求。

这个MPM具有很强的自我调节能力,只需要很少的配置指令调整。最重要的是将MaxClients设置为一个足够大的数值以处理潜在的请求高峰,同时又不能太大,以致需要使用的内存超出物理内存的大小。

Worker MPM

此多路处理模块(MPM)使网络服务器支持混合的多线程多进程。由于使用线程来处理请求,所以可以处理海量请求,而系统资源的开销小于基于进程的MPM。但是,它也使用了多进程,每个进程又有多个线程,以获得基于进程的MPM的稳定性。

每个进程可以拥有的线程数量是固定的。服务器会根据负载情况增加或减少进程数量。一个单独的控制进程(父进程)负责子进程的建立。每个子进程可以建立ThreadsPerChild数量的服务线程和一个监听线程,该监听线程监听接入请求并将其传递给服务线程处理和应答。

不管是Worker模式或是Prefork 模式,Apache总是试图保持一些备用的(spare)或者是空闲的子进程(空闲的服务线程池)用于迎接即将到来的请求。这样客户端就不需要在得到服务前等候子进程的产生。

Event MPM(不建议)

以上两种稳定的MPM方式在非常繁忙的服务器应用下都有些不足。尽管HTTP的Keepalive方式能减少TCP连接数量和网络负载,但是 Keepalive需要和服务进程或者线程绑定,这就导致一个繁忙的服务器会耗光所有的线程。 Event MPM是解决这个问题的一种新模型,它把服务进程从连接中分离出来。在服务器处理速度很快,同时具有非常高的点击率时,可用的线程数量就是关键的资源限 制,此时Event MPM方式是最有效的。一个以Worker MPM方式工作的繁忙服务器能够承受每秒好几万次的访问量(例如在大型新闻服务站点的高峰时),而Event MPM可以用来处理更高负载。值得注意的是,Event MPM不能在安全HTTP(HTTPS)访问下工作。

对于Event 模式,apache给出了以下警告

This MPM is experimental, so it may or may not work as expected .

Event MPM目前处于试验状态,他可能不按照预期的那样工作。

如何配置三种MPM

查看我的apache使用何种MPM
./httpd -l
# prefork.c  -->Prefork
# worker.c   -->Worker
# event.c	 -->Event

在一堆列表中查查看存在上面哪个就表示你的apache使用的是何种MPM工作方式了。简单吧,如果你的机器还没有安装apache的话,apache会默认采用prefork模式,当然你也可以在编译的时候加上

./configure [OPTION]... [VAR=VALUE]... --with-mpm=prefork|worker|event

来指定它们,当然event模式我们大可忽略,因为你没有这个义务去使用它,因为它是不可靠的。

MPM的配置文件在哪里?
# prefix/apache/conf/extra/httpd-mpm.conf
perfork MPM配置
<IfModule mpm_prefork_module>
    StartServers 5
	MinSpareServers 5
	MaxSpareServers 10
	MaxRequestWorkers 250
	MaxConnectionsPerChild 0
</IfModule>

# StartServers:  数量的服务器进程开始
# MinSpareServers:  最小数量的服务器进程
# MaxSpareServers:  最大数量的服务器进程
# MaxRequestWorkers:  最大数量的服务器进程允许开始
# MaxConnectionsPerChild:  最大连接数的一个服务器进程服务 (笔者日访问20WPV设置为2000)

prefork 控制进程在最初建立“StartServers”个子进程后,为了满足MinSpareServers设置的需要创建一个进程,等待一秒钟,继续创建两 个,再等待一秒钟,继续创建四个……如此按指数级增加创建的进程数,最多达到每秒32个,直到满足MinSpareServers设置的值为止。这种模式 可以不必在请求到来时再产生新的进程,从而减小了系统开销以增加性能。MaxSpareServers设置了最大的空闲进程数,如果空闲进程数大于这个 值,Apache会自动kill掉一些多余进程。这个值不要设得过大,但如果设的值比MinSpareServers小,Apache会自动把其调整为 MinSpareServers+1。如果站点负载较大,可考虑同时加大MinSpareServers和MaxSpareServers。

MaxRequestsPerChild设置的是每个子进程可处理的请求数。每个子进程在处理了“MaxRequestsPerChild”个请求后将自 动销毁。0意味着无限,即子进程永不销毁。虽然缺省设为0可以使每个子进程处理更多的请求,但如果设成非零值也有两点重要的好处:

1、可防止意外的内存泄漏(当你的服务器内存充足的情况下可以,内存不足建议设置合理的进程数)。
2、在服务器负载下降的时侯会自动减少子进程数。

因此,可根据服务器的负载来调整这个值。

MaxRequestWorkers指令集同时将服务请求的数量上的限制。任何连接尝试在MaxRequestWorkerslimit将通常被排队,最多若干基于上ListenBacklog指令。

在apache2.3.13以前的版本MaxRequestWorkers被称为MaxClients 。

(MaxClients是这些指令中最为重要的一个,设定的是 Apache可以同时处理的请求,是对Apache性能影响最大的参数。其缺省值150是远远不够的,如果请求总数已达到这个值(可通过ps -ef|grep http|wc -l来确认),那么后面的请求就要排队,直到某个已处理请求完毕。这就是系统资源还剩下很多而HTTP访问却很慢的主要原因。虽然理论上这个值越大,可以 处理的请求就越多,但Apache默认的限制不能大于256。)

worker MPM配置
<IfModule mpm_worker_module>
    StartServers 3
	MinSpareThreads 75
	MaxSpareThreads 250 
	ThreadsPerChild 25
	MaxRequestWorkers 400
	MaxConnectionsPerChild 0
</IfModule>

# StartServers:  初始数量的服务器进程开始
# MinSpareThreads:  最小数量的工作线程
# MaxSpareThreads:  最大数量的工作线程
# ThreadsPerChild:  固定数量的工作线程在每个服务器进程
# MaxRequestWorkers:  最大数量的工作线程
# MaxConnectionsPerChild:  最大连接数的一个服务器进程服务

Worker 由主控制进程生成“StartServers”个子进程,每个子进程中包含固定的ThreadsPerChild线程数,各个线程独立地处理请求。同样, 为了不在请求到来时再生成线程,MinSpareThreads和MaxSpareThreads设置了最少和最多的空闲线程数;

而MaxRequestWorkers 设置了同时连入的clients最大总数。如果现有子进程中的线程总数不能满足负载,控制进程将派生新的子进程MinSpareThreads和 MaxSpareThreads的最大缺省值分别是75和250。这两个参数对Apache的性能影响并不大,可以按照实际情况相应调节 。

ThreadsPerChild是worker MPM中与性能相关最密切的指令。ThreadsPerChild的最大缺省值是64,如果负载较大,64也是不够的。这时要显式使用 ThreadLimit指令,它的最大缺省值是20000。

Worker模式下所能同时处理的请求总数是由子进程总数乘以ThreadsPerChild 值决定的,应该大于等于MaxRequestWorkers。如果负载很大,现有的子进程数不能满足时,控制进程会派生新的子进程。默认最大的子进程总数是16,加大时 也需要显式声明ServerLimit(最大值是20000)。需要注意的是,如果显式声明了ServerLimit,那么它乘以 ThreadsPerChild的值必须大于等于MaxRequestWorkers,而且MaxRequestWorkers必须是ThreadsPerChild的整数倍,否则 Apache将会自动调节到一个相应值。

event MPM配置

这是一个魔鬼,不介绍也无妨。

参考

  • http://httpd.apache.org/docs/2.2/mpm.html
  • http://hi.baidu.com/zwfec/item/904c91d24ef47016d80e4471
  • http://blog.phpdragon.com/archives/131
  • http://httpd.apache.org/docs/2.2/mod/mpm_common.html

ubuntu下安装php开发环境笔记

本文主要介绍如何在ubuntu环境下安装一些常用的应用软件和开发软件,算给自己做个安装笔记吧。
基础环境介绍

OS:   ubuntu 12.04 64bit
CPU:  Intel(R) Core(TM) i3-2120 CPU @ 3.30GHz
Mem:  4G
Disk: 50G

本文所述安装软件清单

好了,上面阐述了本次要安装的软件,下面开始进入正题。

安装搜狗拼音输入法

一般的我们对于新的系统首要的应该是输入法了,没错,虽然默认的ubuntu在安装的过程中有附加的拼音输入法,但是我个人比较偏爱搜狗拼音输入法,这不第一个安装是就是输入法了。
由于搜狗输入法是基于fcitx框架开发的,所以我们在安装搜狗拼音输入法,如有必要请先卸载ibus。

sudo apt-get remove ibus

然后,添加fcitx源,更新资源

sudo add-apt-repository ppa:fcitx-team/nightly

sudo apt-get update

再进行安装搜狗拼音输入法。

sudo apt-get install fcitx fcitx-config-gtk fcitx-module-cloudpinyin fcitx-sogoupinyin im-switch

sudo im-switch -s fcitx -z default

#其实还有很多拼音输入法可选的 fcitx-sunpinyin fcitx-googlepinyin 
#fcitx-module-cloudpinyin 模块是对所有的拼音引擎添加了云支持,在第二个候选词的位置提供云结果

安装完成后,注销当前用户(推荐)或重启一下即可看到搜狗拼音输入法了。

安装谷歌浏览器(chrome)

一般来说ubuntu下面自带了Firefox浏览器的,不过我是一名忠实的chrome迷,我的tag和sync都在chrome上呢,当然还有我习惯的goagent(下步再说)。
首先我们当然要去下载chrome的最新版了,我的是ubuntu64bit的系统当然选择64bit.deb了,选好了点击“接受并安装”,然后就等待下载吧。

cd ~/下载
#64bit 
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb

#32bit
wget https://dl.google.com/linux/direct/google-chrome-stable_current_i386.deb

下载完成之后,我们开始安装chrome。

#为了避免提示软件依赖错误,需要libnss3-ld,我们在安装chrome前先运行
sudo apt-get -f install

cd ~/下载

sudo dpkg -i google-chrome-stable_current_amd64.deb

到这里你可以点击Dash主页,搜索chrome看看是否可以用了?

安装goagent

goagent是一款非常好用的FQ软件,在CN这个软件可以给我们看到外面世界,而且free,而且跨平台无论你是windows/linux/ios/osx/android都令你尽情畅游互联网,享受无国界的上网体验。

当然我这里只是提供gogent在ubuntu环境下的安装介绍,安装goagent的前期工作我们是要做足的,因为goagent必须依赖于python2+

sudo apt-get install python-dev python-greenlet python-gevent python-vte python-openssl python-crypto python-appindicator

#安装gevent(提升多线程性能,强烈建议安装)
sudo apt-get install python-dev python-pip && sudo pip install gevent --upgrade

#安装是否成功,你现在可以试试python的命令,如果显示出版本号,那么至此应该可以算是python装完了
python --version

前期工作做完了,现在下载goagent的最新版,目前googlecode上最新是3.1.5。

cd ~/下载
wget https://nodeload.github.com/goagent/goagent/legacy.zip/3.0 -O goagent.zip

#解压
unzip goagent.zip
#建议将goagent放在/opt目录,非强制,完全自定义
sudo mv goagent-goagent-* /opt/goagent

cd /opt/goagent/server
#上传appid
python uploader.py

#根据提示输入你自己创建的appid(若要同时上传多appid在appid之间用|隔开)和你的Gmail帐号和密码(如果开启了两步验证,密码为16位的应用程序专用密码)
#上传完成后不要忘记修改local/proxy.ini文件中的appid
#如果出现无法执行的情况,请检查goagent目录权限

goagent的服务端程序配置完成了,现在再配置它的客户端。

cd /opt/goagent/local

#运行goagent 在命令行下
python proxy.py

#运行goagent以托盘形式(可选)
python /opt/goagent/local/goagent-gtk.py

#以开启自启动(可选)
sudo vi /etc/rc.local

#在exit 0前插入
/opt/goagent/local

退出goagent

如果是直接终端使用”python proxy.py”运行,在终端按”Ctrl+C”组合键可终止运行;如果使用gtk托盘,在托盘图标上右键菜单有退出选项。直接关闭终端窗口也会退出。如果以后台进程运行,先用”ps aux | grep proxy.py”找到goagent的PID,然后直接kill对应的PID 。

ps aux|grep proxy.py|grep -v "grep"|awk '{print $2}'|xargs kill

关于goagent证书导入问题,如果你sudo提权后是可以自动导入证书,但是我的chrome貌似不行,只能使用手工导入CA.crt证书。

1、打开chrome
2、设置
3、显示高级设计
4、HTTPS/SSL(管理证书)
5、证书管理器
6、授权中心
7、点击“导入”,选择到/opt/goagent/local/CA.crt。出现三个可选框全部勾选保存,重启chrome即可。
8、测试访问下www.facebook.com

PS:一个goagent小技巧,利用goagent作为代理终端下载一些访问比较慢的update包,你应该有过这样的体会,一些国外的源在国内访问时常被终端,我们可以利用goagent来代理我们在终端所访问的资源。

#代理http
export http_proxy=http://127.0.0.1:8087

#代理https
export https_proxy=http://127.0.0.1:8087

安装xampp

前期我们也算完成一些应用软件吧,既然作为桌面系统来开发php,xampp是不二的选择,好处嘛就是下载一个就等于下载了apache+php+mysql+ftp了,是不是很爽?当然在生产环境下我们还是讲究的是专一性,用到的才安装。但是我这是桌面系统pc,不是服务器,所以xampp是我首选的目标了。
废话不说太多,先去下载xampp这个是必须的。

#如果你用了goagent代理了,呵呵你会发现这个的下载速度很快
wget http://superb-dca2.dl.sourceforge.net/project/xampp/XAMPP%20Linux/1.8.3/xampp-linux-x64-1.8.3-3-installer.run

sudo chmod 755 xampp-linux-*-installer.run

#开始安装 你会发现弹出一个GUI界面来给你安装
sudo ./xampp-linux-*-installer.run

#安装完成后xampp默认安装在/opt/lamp中 执行下面这条命令启动xampp
sudo /opt/lampp/lampp start

#如果你启动成功了,你用浏览器访问下http://localhost是否看到xampp欢迎界面

#停止xampp
sudo /opt/lampp/lampp stop

#更多的命令你可以试试
/opt/lampp/lampp -h

如果你还是更多的疑问你可以参考xampp的FAQ

安装ZendStudio

话说vim是最牛X的编辑器,但是对于我这种一直偏爱zendstudio作为我的IDE怎么舍得把它扔掉?
vim是后话,但是本次还是有很多童鞋喜欢zendstudio,所以还是不能跑题继续开始我的zendstudio安装说明,第一步当然是去下载zendstudio了。

cd ~/下载
#64bit zendstudio 10.6.0
wget http://downloads.zend.com/studio-eclipse/10.6.0/ZendStudio-10.6.0-linux.gtk.x86_64.tar.gz

#32bit zendstudio 10.6.0 
wget http://downloads.zend.com/studio-eclipse/10.6.0/ZendStudio-10.6.0-linux.gtk.x86.tar.gz

我下载的64bit的zendstudio,然后就是解压过程,将zendstudio移动到/opt/zendstudio文件夹下,由于zendstudio是基于eclipse开发的,当然需要jre的支持了,去java.com中下载java吧。下载完成后,在/opt/zendstudio目录中新建一个jre目录,将下载好的java压缩包中的文件复制到jre中即可。

cd /opt/zendstudio

./ZendStudio

至此,zendstudio已成功安装,你可以设置快捷方式到桌面。关于破解zendstudio请参见《首发Zend Studio 10.6正式版注册破解》。

安装WineQQ

WineQQ?其实就是在wine的支撑下能在linux下面运行windows的QQ版本,没有办法在中国im界绝对是QQ垄断了,在linux上面之前有官方提供的版本,但是目前官方似乎已经停止了linux-qq的维护了(当然,webQQ也应该能满足大多数的需求了),为了能在linux上面运行QQ,首先我们得要安装支撑软件wine。

sudo add-apt-repository ppa:ubuntu-wine/ppa

sudo apt-get update

sudo apt-get install wine1.7
#执行安装wine命令需要几分钟的时间,请耐心等待……
#中间会出现一个让你点击确定按钮的界面,请留意

安装完成后请在你的dash搜索wine看看出现酒杯没有?
下面我们开始安装wineQQ,longene论坛提供的qq2013sp6它们说挺好的,但是我测试了使用视频不稳定直接崩溃,其他的貌似还没有发现什么问题。

cd ~/下载
wget http://www.longene.org/download/WineQQ2013-20131120-Longene.deb

#如果之前安装过旧版本需要先卸载(通过dpkg -l | grep qq查看)。
sudo dpkg -i WineQQ2013-20131120-Longene.deb

#如果你的ubuntu和我一样是64bit操作系统的话,那么你还需要运行
sudo apt-get install ia32-libs

至此wineQQ安装完成。

Apache配置虚拟主机和多HTTPS服务

之前写过一篇是讲apache配置虚拟主机的文章:http://www.markdream.com/server/apache-vhost.shtml

多个虚拟主机的配置还是教程看上文,最近闲来无事,研究了一下apache的多虚拟主机的同时添加多个https的服务

事实上apache在配置虚拟主机的时候,我们配置httpd-vhosts.conf这个文件(我已经将注释去除掉了,如果你的apache版本在2.2.x以上你大可放心的覆盖,也可以运行,不过你需要修改下hosts文件)

 

NameVirtualHost *:80

<VirtualHost abc.com:80>
    DocumentRoot "D:\abc"
    ServerName abc.com
    <Directory "D:\abc>
        AllowOverride All
        Order Allow,Deny
        Allow from all
    </Directory>
</VirtualHost>

<VirtualHost xyz.com:80>
    DocumentRoot "D:\xyz"
    ServerName xyz.com
    <Directory "D:\xyz>
        AllowOverride All
        Order Allow,Deny
        Allow from all
    </Directory>
</VirtualHost>

<VirtualHost jx.com:80>
    DocumentRoot "D:\jx"
    ServerName jx.com
    <Directory "D:\jx>
        AllowOverride All
        Order Allow,Deny
        Allow from all
    </Directory>
</VirtualHost>

一般的配置也可以可以达到目的了,服务器上面我们大可不必修改hosts文件,只需要将ServerName改成你的域名就成,当然你的域名必须做好解析到本台服务器上。

 

好了,虚拟主机的配置过程是十分简单的,下来再看如何配置多个https服务。

首先请确保你下载的apache是支持openssl的,如果没有那么就不要往下看了。(点我下载apache

我们修改httpd.conf文件中的ssl设置项搜索这两行,请一行一行的搜

 

#LoadModule ssl_module modules/mod_ssl.so

#Include conf/extra/httpd-ssl.conf

将前面的“#”号删除掉。OK保存

 

下面我们再来生成证书,这里的教程我是以windows操作系统来演示的。

1、运行cmd,进入httpd的bin目录

 

cd C:\Program Files\Apache Software Foundation\Apache2.2\bin

2、如果你安装apache有openssl的话 那么在这个bin目录下会有一个openssl.exe的文件,我们来生成证书

 

 

set openssl_conf=./openssl.cnf
openssl genrsa 2048 -des3 > server.key

openssl req -new -key server.key > server.csr

在第二步需要设置相关参数,下面我列出来

Country Name (2 letter code) [AU]:CN #国家代码 建议CN
State or Province Name (full name) [Some-State]:GUANGXI #所在省份
Locality Name (eg, city) []:NANNING #城市
Organization Name (eg, company) [Internet Widgits Pty Ltd]:YOURCOMP #你的公司名
Organizational Unit Name (eg, section) []:HELLO #组织或机构
Common Name (e.g. server FQDN or YOUR name) []:abc.com #申请证书的域名 重要
Email Address []:admin@abc.com #管理员邮箱

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:123456 #交换密钥
An optional company name []:abc.com #和你申请的域名一致就行了

再生成证书

 

#生成证书的有效期
openssl req -x509 -days 365 -key server.key -in server.csr > server.crt

你再看bin目录下面是不是有这三个文件了

 

crt

如果有了,OK我们的证书生成完毕。现在就开始配置https了,进入conf/extra文件夹中,找到一个httpd-ssl.conf的文件用文本工具打开它

 

Listen 443
#需要加上这段虚拟主机
NameVirtualHost *:443

AddType application/x-x509-ca-cert .crt
AddType application/x-pkcs7-crl    .crl

SSLPassPhraseDialog  builtin

#请注意修改你的apache安装路径对应的log
SSLSessionCache        "shmcb:C:/Program Files/Apache Software Foundation/Apache2.2/logs/ssl_scache(512000)"
SSLSessionCacheTimeout  300

SSLMutex default

#去除原来的*:443
<VirtualHost xyz.com:443>
 DocumentRoot "d:/xyz_ssl"
    ServerName xyz.com:443
    SSLEngine on
	#最关键就是这里,我们上面生成的证书在这里就用到了,注意路径是否能够找到你的证书
	#我这里有两个https所以为了方便你会看到这里是另外一个证书 xyz.com的证书
	SSLCertificateFile "C:/Program Files/Apache Software Foundation/Apache2.2/conf/xyz_cret/server.crt"
	SSLCertificateKeyFile "C:/Program Files/Apache Software Foundation/Apache2.2/conf/xyz_cret/server.key"

    <Directory "d:/xyz_ssl">
        Options -Indexes FollowSymLinks
        AllowOverride All
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

<VirtualHost abc.com:443>
 DocumentRoot "d:/abc_ssl"
    ServerName abc.com:443

    SSLEngine on
	#我这里有两个https所以为了方便你会看到这里是另外一个证书 abc.com的证书
	SSLCertificateFile "C:/Program Files/Apache Software Foundation/Apache2.2/conf/abc_cret/server.crt"
	SSLCertificateKeyFile "C:/Program Files/Apache Software Foundation/Apache2.2/conf/abc_cret/server.key"

    <Directory "d:/abc_ssl">
        Options -Indexes FollowSymLinks
        AllowOverride All
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

 

我已经把注释都删掉了,如果不出什么意外的话,将你的证书路径找对就可以运行,请注意上面的中文注释!!!

好了,重启apache服务,我们来看下效果。

 

crt1

 

OK,重在爱好,动手勤思考。

 

FreeBSD 9.0 ports 安装apache+mysql+php过程笔记

虽然说是装了N次的apache、mysql、php运行环境了,没有把他们总结起来,在bsd上面我最喜欢就是ports安装了,当然也有童鞋习惯源码安装,那就看个人喜好了,你要相信负责ports包源的人不是那么烂。什么情况下自己源码安装,诸如编译一些特定的修改过的XX。不说了直接开始。

由于我们在天国,所以我还是十分有必要提醒各位童鞋添加ports天国源吧,省了你很多时间

//请注意这个make.conf文件 如果不存在请自行新建

vi /etc/make.conf

然后在里面写上这句代码 请注意只有两行请勿随意换行(我一直都用freebsdchina.org的源很快,适合天国童鞋使用)

MASTER_SITE_BACKUP?=http://mirrors.163.com/FreeBSD/ports/distfiles/${DIST_SUBDIR}/
MASTER_SITE_OVERRIDE?=${MASTER_SITE_BACKUP}

然后为了我们使用的软件是最新最好的软件,最好进行更新下ports里面的软件版本数据库

portsnap fetch&&portsnap extract&&portsnap update

当你执行这条命令的时候,恭喜你!你现在可以去泡杯茶来慢慢品尝,这个时间估计在10-30分钟左右,具体还要看你的网络条件。好搞定上面的工作之后就开始我们的安装之旅了

1、首先安装Apache

继续阅读FreeBSD 9.0 ports 安装apache+mysql+php过程笔记

Apache&Nginx开启gzip

网页压缩的好处就不用多说了,减少网络延迟,提升网页加载速度什么的……

首先说说apache开启gzip压缩的方法,首先打开“httpd.conf”

//gzip需要这两个模块支持将前面的“#”去掉  大概在91行左右
#LoadModule deflate_module modules/mod_deflate.so
                                           
//大概在102行左右
LoadModule headers_module modules/mod_headers.so

然后在配置文件最后一行加入这些模块配置即可

<IfModule deflate_module>
    SetOutputFilter DEFLATE
    # Don\x92t compress images and other
    SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png|bmp)$ no-gzip dont-vary
    SetEnvIfNoCase Request_URI .(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary
                                    
    SetEnvIfNoCase Request_URI .(?:pdf|doc|xls)$ no-gzip dont-vary
    AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/x-httpd-php application/x-javascript
</IfModule>

注意不要乱换行即可,修改好了之后请重启Apache服务,然后去打开一个网页,我在这里就推荐大家使用chrome浏览器啦~

继续阅读Apache&Nginx开启gzip