分类存档: 服务器 Apache-Nginx

FastCGI开发学习

1. 下载fastcgi开发包,编译安装

http://www.fastcgi.com/dist/fcgi-current.tar.gz

wget http://www.fastcgi.com/dist/fcgi-current.tar.gz
tar zvzf fcgi-current.tar.gz
cd fcgi-current
./configure
make
make install

2. 下载spawn-fcgi,编译安装

http://www.lighttpd.net/download/spawn-fcgi-1.6.0.tar.gz

wget http://www.lighttpd.net/download/spawn-fcgi-1.6.0.tar.gz
tar zxvf spawn-fcgi-1.6.0.tar.gz
cd spawn-fcgi-1.6.0
./configure
make
make install

3. 编写测试的c fastcgi代码,存为 hello.c

#include 
int main( int argc, char *argv[] )
{
    while( FCGI_Accept() >= 0 ) {
        printf( "Content-Type: text/plain\n\n" );
        printf( "Hello FastCGI\n" );
    }
    return 0;
}

编译c源文件,运行时有可能会报找不到lib包,这里我复制了一份,也可以做一个软链接。我这里用的是64位的机器,所以复制到了:/usr/lib64,32位的用:/usr/lib。

gcc -o hello hello.c -lfcgi

4. 修改nginx.conf配置文件,重新启动nginx

server {
            listen   80;
            server_name _;

            location / {
                  root   /home/user/www;
                  index  index.html;
                  fastcgi_pass 127.0.0.1:9000;
            }
}

5. 启动hello

spawn-fcgi -a127.0.0.1 -p9000 -n ./hello

6. 访问nginx服务器,浏览器就会输出:Hello FastCGI

一个nginx c fastcgi学习环境搭建完毕。

fastcgi 开发学习资料:

FastCGI中文参考手册

http://man.lupaworld.com/content/develop/Perl/FastCGI_handbook_cn.pdf

Nginx下配置FastCGI

http://202.108.59.116/docs/Nginx%CF%C2%C5%E4%D6%C3FastCGI.pdf

CentOS Ubuntu 等linux 修改IP地址, DNS, 网关

由于修改网关总是忘记在哪个地方,每次都要去查询,太麻烦,今天在此备份一下:

一、CentOS 修改IP地址

修改对应网卡的IP地址的配置文件

# vi /etc/sysconfig/network-scripts/ifcfg-eth0
修改以下内容
DEVICE=eth0 #描述网卡对应的设备别名,例如ifcfg-eth0的文件中它为eth0
BOOTPROTO=static #设置网卡获得ip地址的方式,可能的选项为static,dhcp或bootp,分别对应静态指定的 ip地址,通过dhcp协议获得的ip地址,通过bootp协议获得的ip地址
BROADCAST=192.168.0.255 #对应的子网广播地址
HWADDR=00:07:E9:05:E8:B4 #对应的网卡物理地址
IPADDR=192.168.1.2 #如果设置网卡获得 ip地址的方式为静态指定,此字段就指定了网卡对应的ip地址
IPV6INIT=no
IPV6_AUTOCONF=no
NETMASK=255.255.255.0 #网卡对应的网络掩码
#NETWORK=192.168.1.1 #网卡对应的网络地址
GATEWAY=192.168.1.1(设置本机连接的网关的IP地址。例如,网关为10.0.0.2)
ONBOOT=yes #系统启动时是否设置此网络接口,设置为yes时,系统启动时激活此设备
TYPE=Ethernet
PEERDNS=yes
USERCTL=no
~

二、CentOS 修改网关
修改对应网卡的网关的配置文件
[root@centos]# vi /etc/sysconfig/network

修改以下内容
NETWORKING=yes(表示系统是否使用网络,一般设置为yes。如果设为no,则不能使用网络,而且很多系统服务程序将无法启动)

NETWORKING_IPV6=no

HOSTNAME=localhost.localdomain(设置本机的主机名,这里设置的主机名要和/etc/hosts中设置的主机名对应)

三、CentOS 修改DNS

修改对应网卡的DNS的配置文件
# vi /etc/resolv.conf
修改以下内容

nameserver 192.168.1.1 #域名服务器
nameserver 192.168.1.2

四、重新启动网络配置
# service network restart

# /etc/init.d/network restart

修改 IP 地址
即时生效:
# ifconfig eth0 192.168.0.2 netmask 255.255.255.0
启动生效:
修改 /etc/sysconfig/network-scripts/ifcfg-eth0

修改网关 Default Gateway
即时生效:
# route add default gw 192.168.0.1 dev eth0
启动生效:
修改 /etc/sysconfig/network

修改 DNS
修改/etc/resolv.conf
修改后可即时生效,启动同样有效

修改 host name
即时生效:
# hostname centos1
启动生效:
修改/etc/sysconfig/network

+++++++++++++++++++++++++++++++++++++++++

Ubuntu 下修改:

xinze@xinze-desktop:$ vi /etc/network/interfaces

auto lo

iface lo inet loopback

auto eth0

iface eth0 inet static

address 192.168.1.11

netmask 255.255.255.0

gateway  192.168.1.1

xinze@xinze-desktop:$ /etc/init.d/network restart

ffmpeg ffmpeg-php 安装及出错解决办法

在centos 5.4环境下安装 FFMPEG 和 FFMPEG-PHP 。

  1. 下载ffmepg及ffmpeg-php
    wget http://www.ffmpeg.org/releases/ffmpeg-export-snapshot.tar.bz2
    wget http://downloads.sourceforge.net/project/ffmpeg-php/ffmpeg-php/0.6.0/ffmpeg-php-0.6.0.tbz2?use_mirror=ncu
  2. 安装ffmpeg
    tar -xjf ffmpeg-export-snapshot.tar.bz2
    #进入解压后的源文件目录
    cd ffmpeg-export-2010-03-02/
    ./configure --prefix=/usr/local   --enable-shared
    make
    make install

    测试是否能正常使用:

    [root@mail ffmpeg-export-2010-03-02]# ffmpeg
    FFmpeg version SVN-r22144-snapshot, Copyright (c) 2000-2010 the FFmpeg developers
      built on Mar 30 2010 23:53:53 with gcc 4.1.2 20080704 (Red Hat 4.1.2-46)
      configuration: --prefix=/usr/local --enable-shared
      libavutil     50. 9. 0 / 50. 9. 0
      libavcodec    52.55. 0 / 52.55. 0
      libavformat   52.54. 0 / 52.54. 0
      libavdevice   52. 2. 0 / 52. 2. 0
      libswscale     0.10. 0 /  0.10. 0

    如果提示:“ffmpeg: error while loading shared libraries: libavdevice.so.52: cannot open shared object file: No such file or directory”

    vi /etc/ld.so.conf.d/ffmpeg.conf
    #在里面加入:usr/local/lib,这个目录,为ffmpeg安装后libavdevice.so.52等lib文件所在目录。
    ldconfig -v
  3. 安装ffmpeg-php
    tar -xjf ffmpeg-php-0.6.0.tbz2
    cd ffmpeg-php-0.6.0
    /usr/local/php/bin/phpize
    ./configure --with-php-config=/usr/local/php/bin/php-config  --with-ffmpeg=/usr/local
    make test
    make
    make install
    #在php.ini中加入extension=ffmpeg.so

    如果在make test中发现错误提示:make: *** [ffmpeg_frame.lo] Error 1
    则:

    mv ffmpeg_frame.loT ffmpeg_frame.lo

    测试是否安装成功:

    php -r 'phpinfo();' | grep ffmpeg
    ffmpeg
    ffmpeg-php version => 0.6.0-svn
    ffmpeg-php built on => Mar 31 2010 14:17:14
    ffmpeg-php gd support  => enabled
    ffmpeg libavcodec version => Lavc52.55.0
    ffmpeg libavformat version => Lavf52.54.0
    ffmpeg swscaler version => SwS0.10.0
    ffmpeg.allow_persistent => 0 => 0
    ffmpeg.show_warnings => 0 => 0

    如果有ffmepg-php模块错误提示:php: symbol lookup error: /usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/ffmpeg.so: undefined symbol: register_ffmpeg_frame_class

    nm /usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/ffmpeg.so|grep register_ffmpeg_frame_class
    #输出U register_ffmpeg_frame_class
    

    则修改ffmpeg_frame.c,将3处的PIX_FMT_RGBA32 更改为PIX_FMT_RGB32即可。

    vi ffmpeg_frame.c
    :%s/PIX_FMT_RGBA32/PIX_FMT_RGB32
    :w
    :q!
    ./configure --with-php-config=/usr/local/php/bin/php-config  --with-ffmpeg=/usr/local
    make test
    make
    make install

配置Apache,利用压缩网页来提升网站浏览速度及效果对比

本文主要介绍如何通过配置Apache对页面进行压缩从而节省网站的带宽以及提升用户的访问速度。与PHP中ob_start(“ob_gzhandler”)功能一样!
网站的访问速度是由多个因素所共同决定的,这些因素例如应用程序的响应速度、网络带宽、服务器性能、与客户端之间的网络传输速度等等。其中最重要的一个因素是应用程序本身的响应速度,因此当你为网站性能所苦恼时,你第一个需要着手进行处理的便是尽可能的提升应用程序的执行速度,你可以使用缓存或者是优化代码的执行效率来提升应用程序的速度。

但是,本文并不是介绍如何来提升应用程序的执行效率,前面提到的只不过是为了防止您病急乱投医。在确保您的应用程序的性能已经达到足够好,同时服务器的性能也完全满足的情况下,不妨来试试网页压缩来进一步提升网页的浏览速度,而且非常重要的是,它完全不需要任何的成本,只不过是会让您的服务器CPU占用率稍微提升一两个百分点而已或者更少。

网页压缩是一项由 WEB 服务器和浏览器之间共同遵守的协议,也就是说 WEB 服务器和浏览器都必须支持该技术,所幸的是现在流行的浏览器都是支持的,包括 IE、FireFox、Opera 等;服务器有 Apache 和 IIS 等。双方的协商过程如下:

1、首先浏览器请求某个 URL 地址,并在请求的头 (head) 中设置属性 accept-encoding 值为 gzip, deflate,表明浏览器支持 gzip 和 deflate 这两种压缩方式(事实上 deflate 也是使用 gzip 压缩协议,下面我们会介绍二者之间的区别);
2、WEB 服务器接收到请求后判断浏览器是否支持压缩,如果支持就传送压缩后的响应内容,否则传送不经过压缩的内容;
3、浏览器获取响应内容后,判断内容是否被压缩,如果是则解压缩,然后显示响应页面的内容。

在实际的应用中我们发现压缩的比率往往在 3 到 10 倍,也就是本来 50k 大小的页面,采用压缩后实际传输的内容大小只有 5 至 15k         大小,这可以大大节省服务器的网络带宽,同时如果应用程序的响应足够快时,网站的速度瓶颈就转到了网络的传输速度上,因此内容压缩后就可以大大的提升页面的浏览速度。

接下来我们介绍几种常用的环境下如何启用网页压缩功能。

配置方法

纯 Tomcat 服务器

如果您的 WEB 应用程序是跑在 Tomcat 服务器下的,而且直接使用 Tomcat 所提供的 HTTP 服务,那建议你马上动手,因为实在是太简单了,你只需要在 server.xml 配置文件中给 HTTP Connector 增加一个 compression 的参数值为 on 并重启 Tomcat 服务器就立刻生效,配置如下:

<Connector port=”8080″ protocol=”HTTP/1.1″
maxThreads=”150″ connectionTimeout=”20000″
redirectPort=”8443″ compression=”on”/>

Tomcat 采用的是 HTTP/1.1 的 GZIP 压缩协议,它会根据浏览器送过来的请求中的 accept-encoding 值是否包含 gzip 来判断浏览器是否支持 gzip 压缩协议,如果浏览器支持就启用 gzip 压缩,否则就不进行任何压缩处理。Tomcat 中还有另外一个参数 compressableMimeType,这个参数可以用来指定压缩哪种类型的内容,例如可以指定该配置值为:text/html,text/plain ,则只压缩 contentType 为 text/html 和 text/plain 的页面,不过您最好也将 css 和 javascript 文件也算在压缩的文件类型中,因为这两者的压缩效果也十分的明显。

Apache 服务器

在 apache 1.3 版本,大家常用 mod_gzip 对输出内容进行压缩,现在主流的浏览器都支持 gzip 解压缩。在 apache2 下,这个模块换名为 mod_deflate,对应的模块文件名是 mod_deflate.so。mod_gzip 本文不做介绍,下面描述一下在 Apache 2 下如何启用并配置 mod_deflate 模块。默认安装的 Apache 不管是 Windows 还是 Linux/Unix,都是不启用该模块的, Linux/Unix 下甚至不带该模块,你需要手工编译这个模块。

下面我们分别介绍在 Windows 和 Linux 操作系统下如何启用并配置 mod_deflate 模块。

在 Windows 下采用安装程序安装的 Apache 服务器已经带有 deflate 所需要的模块 mod_deflate.so 和 mod_headers.so,我们只需要在 httpd.conf 配置文件中启用并进行相关的配置即可,配置如下:

LoadModule deflate_module modules/mod_deflate.so
LoadModule headers_module modules/mod_headers.so
<Location />
# Insert filter
SetOutputFilter DEFLATE
# Netscape 4.x has some problems…
BrowserMatch ^Mozilla/4 gzip-only-text/html
# Netscape 4.06-4.08 have some more problems
BrowserMatch ^Mozilla/4\.0[678] no-gzip
# MSIE masquerades as Netscape, but it is fine
# BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
# NOTE: Due to a bug in mod_setenvif up to Apache 2.0.48
# the above regex won’t work. You can use the following
# workaround to get the desired effect:
BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html
# Don’t compress images
SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary
# Make sure proxies don’t deliver the wrong content
Header append Vary User-Agent env=!dont-vary
</Location>

而如果是 Linux/Unix 操作系统,如果你没有在编译安装的过程中将所需要的两个模块 mod_deflate 和 mod_headers 编译进去的话,那就稍微有点麻烦,首先我们先看如何在编译安装 Apache 过程中也同时编译这两个模块,请在执行 configure 程序时增加两个参数分别是:

# ./configure –enable-deflate –enable-headers

这样在编译完 Apache 后就可以直接在 httpd.conf 中启用并配置 deflate 模块了,配置的方法跟 Windows 平台下是相同的。

如果说您的 Apache 已经在运行了,不想再重新编译一次,那也可以选择只编译 deflate 模块所需的文件 mod_deflate.c 和 mod_headers.c。这两个文件位于 {apache-src}/modules/filters/ 目录下(其中 {apache-src} 为 apache 源文件所在的目录)。使用如下命令来单独编译这两个源文件。

# {apache-bin}/apxs -i -a -c {apache-src}/modules/filters/mod_deflate.c
# {apache-bin}/apxs –i –a –c {apache-src}/modules/filters/mod_headers.c

其中 {apache-bin} 为 Apache 安装目录下的 bin 目录,接下来在 httpd.conf 直接配置该模块即可。

很多时候你在单独编译 deflate 模块的时候可能会碰到编译错误,提示是:

Cannot load /opt/apache/modules/mod_deflate.so into server: /opt/apache/modules/mod_deflate.so: undefined symbol: deflate

解决的方法如下:

编辑 /usr/local/apache2/bin/apr-config 文件修改其中的 LDFLAGS 值为 “-lz”,然后再重新编译 mod_deflate 模块,apxs -ica mod_deflate.c 即可。

为了省却不必要的麻烦,请尽量在编译安装时直接加上 –enable-deflate –enable-headers 参数。

请看看我做的效果对比:

Request Headers:

Host             localhost
User-Agent         Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.2) Gecko/20070219 Firefox/2.0.0.2
Accept             text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language en-us,en;q=0.5
Accept-Encoding gzip,deflate
Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive         300
Connection         keep-alive
Cookie             lastvisit=17%091170301156%09%2Ftest%2Fphpwindblog%2Fupload%2Flogin.php%3F
Cache-Control max-age=0

Response Headers:

压缩前:       1 request   9 KB (0 b from cache)       31ms

Date                 Tue, 13 Mar 2007 07:19:33 GMT
Server                 Apache/2.0.55 (Win32) PHP/5.2.0 mod_python/3.2.8 Python/2.4.3 DAV/2
X-Powered-By         PHP/5.2.0
Keep-Alive             timeout=15, max=100
Connection             Keep-Alive
Transfer-Encoding chunked
Content-Type         text/html

压缩后:1 request   2 KB (0 b from cache)       31ms

Date                    Tue, 13 Mar 2007 06:52:44 GMT
Server                 Apache/2.0.55 (Win32) PHP/5.2.0 mod_python/3.2.8 Python/2.4.3 DAV/2
X-Powered-By         PHP/5.2.0
Vary                 Accept-Encoding,User-Agent
Content-Encoding gzip
Content-Length         1289
Keep-Alive             timeout=15, max=99
Connection             Keep-Alive
Content-Type         text/html

由上面的对比可以看出,原先大小为9KB的文件,经过压缩后,大小仅为2KB。

以上是目前比较流行的两个 WEB 服务器软件以及 Tomcat 服务器对于页面压缩的配置方法;其他的一些 J2EE 应用服务器如果不支持这个功能的话可以考虑利用过滤器(Servlet Filter)来进行处理,具体的代码以及配置方法可以参考 Resin 服务器所提供的文档。但是有一点需要提醒各位读者的是,本文介绍的访问只是在服务器本身的响应速度已经足够优化的情况下进行,也就是说在带宽成为系统瓶颈的时候才来考虑该方案。

apache webdav

#将webdav配置前,记录下我以前用eclips而设置的目录别名:

Alias /php/ e:/workspace/php/
<Directory e:/workspace/php/>
    AllowOverride None
    Options None
    Order allow,deny
    Allow from all
</Directory>

#输入:http://localhost/php 便可以访问我e:/workspace/php/下的程序了.

 #webdav设置,设置个任何人都能访问的

DavLockDB "D:/Apache Group/Apache2/DavLock"
<Location "/dav">
    Dav on
</Location>

#这个需要密码的,用户为:test, 下面注释将如何生成密码,下面的注释边可以在e:/webdav/下生成test用户的密码

#apache路径/bin/htpasswd -c e:/webdav/.htpasswd test

Alias /webdav e:/webdav
<Location /webdav>
Dav On
AuthType Basic
AuthName DAV
AuthUserFile e:/webdav/.htpasswd

<LimitExcept GET OPTIONS>
#设定一个用户名称为:test,然后生成这个名称的密码
    Require valid-user test
</LimitExcept>
</Location>

Apache的文件防盗链-test

因为图片转向用到mod_rewrite.so,所以要将LoadModule rewrite_module modules/mod_rewrite.so打开.

设置代码如下:

# 下载文件防盗链

SetEnvIfNoCase Referer "^((http://www\.hxinze\.com/)|(http://localhost/)|(http://127\.0\.0\.1/))" local_ref=1
<FilesMatch "\.(rar|zip|exe|iso|txt|nri)">
    Order Allow,Deny
    Allow from env=local_ref
</FilesMatch>

# 图片防盗链
RewriteEngine on
# 下一行取消注释则允许直接访问
# RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://localhost/.*$    [NC]
RewriteCond %{HTTP_REFERER} !^http://127\.0\.0\.1/.*$    [NC]
RewriteCond %{HTTP_REFERER} !^http://www\.hxinze\.com/.*$    [NC]

# 图片防盗链重定向
RewriteRule \.(jpg|jpeg|gif|png|bmp)$ /warn.jpg [L,NC]

Apache的文件防盗链

刚刚在百度上搜索"webdav apache",竟然搜到木易的blog上了,看了看Subversion(SVN)安装使用指南, 以及Apache的文件防盗链 , 不错…

这样,直接盗链可以有效的得到预防,通过访问网站来下载文件的人又不受影响。
至于图片,如果不是通过你本身的网站访问的,将重定向到网站根目录下的warn.jpg(需要自己手工弄一个放在根目录下),亦可以设置为允许直接访问

参考文献:
http://apache-server.com/tutorials/ATimage-theft.html

apache 别名 documentroot 外的目录

[size=5][color=darkblue]用eclipse时取的别名的例子:[/color][/size]

Alias /php/ e:/workspace/php/
<Directory e:/workspace/php/>
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>

apache web dav

打开 httpd.conf

[color=blue][b][size=5]将dav的模块打开:[/size][/b][/color]

LoadModule dav_module modules/mod_dav.so
LoadModule dav_fs_module modules/mod_dav_fs.so

[b][color=blue][size=5]设置dav的路径:[/size][/color][/b]

DavLockDB "D:/Apache Group/Apache2/DavLock"
<Location "/dav">
Dav on
</Location>