zoukankan      html  css  js  c++  java
  • centos安装apache/mysql/php备忘

    在centos6.x 上编译安装php时,如果指定编译参数  --wity-mcrypt  会需要安装 libmcrypt-devel这个包才可以。但是当使用yum install  libmcrypt-devel 的时候,会提示无这个包。这是因为centos6.x 默认的yum源不在包含这个资源。需要第三方资源。解决办法为:
    http://www.lishiming.net/data/attachment/forum/month_1211/epel-release-6-7.noarch.rpm
    然后再
    yum install -y  libmcrypt-devel

    如果有依赖实在解决不了,只能下载个源码包了。下载地址:
    http://www.lishiming.net/data/attachment/forum/libmcrypt.tar.bz2

    [添加mysqli.so]

    安装完php后,它会提供一个phpize工具帮助用户继续添加php扩展。需要注意的是,你事先要进入该扩展的目录,一般这些扩展在解压缩后的php-x.x.x目录里面。
    $ cd /root/lamp/php-5.2.3/ext/mysqli
    进入到mysqli的目录。
    再用phpize生成configure文件:

    $ /usr/local/php/bin/phpize

    提示已经生成configure文件

    Configuring for:
    PHP Api Version: 20041225
    Zend Module Api No: 20060613
    Zend Extension Api No: 220060519

    可以看到php与我们现在要添加的api号是不同的,但不妨碍我们使用。
    确定php-config与mysql_config的位置

    $ ./configure --with-php-config=/usr/local/php/bin/php-config
    --with-mysqli=/usr/bin/mysql_config
    $ make
    $ make test
    $ make install

    完成

    Installing shared extensions: /usr/local/php/lib/php/extensions/debug-non-zts-20060613/

    然后在/etc/php.ini加上一句:

    extension=/usr/local/php/lib/php/extensions/debug-non-zts-20060613/mysqli.so

    注意:由于新编译的mysqli与php mysqlnd api no.不符,不能直接调用/usr/lib/php/modules里面的mysqli.so。而是需要我们指定。
    重新启动apache/php-fpm/nginx即可看到已经加载mysqli成功。

    当然你也可以将编译好的so文件直接移动到/usr/lib/php/modules目录。对于已经存在的库,应该停止nginx/apache/php并删除原模块文件,再编译。如重新编译gd.so
    1、先进入php源文件库目录

    $cd /var/download/php-5.4.29/ext/gd

    2、执行产生模块编译文件(通过phpize工具)

    $ /usr/local/php/bin/phpize

    3、编译模块

    $./configure --with-php-config=/usr/local/php/bin/php-config --with-zlib-dir

    --with-jpeg-dir=/usr/lib/libpng12 --with-jpeg-dir=/usr/lib/libjpeg

    --with-xpm-dir=/usr/lib/libXpm --with-freetype-dir=/usr/lib/libfreetype

    --enable-gd-native-ttf --with-t1lib

    对于libpng12、libXpm这些系统库找不到的话可以先通过

    $yum -y install libpng12 libXpm

    安装,并记下它们的位置(一般都在/usr/lib下面)
    4、检查并编译

    $make test && make && make install

    5、将生成的so移动到/usr/lib/php/modules下面

    $mv /usr/local/php/lib/php/extensions/debug-non-zts-20060619/gd.so /usr/lib/php/modules

    是否覆盖,选y

    [httpd:Syntax error on line xx ... cannot load ... .so into server ... permission denied]

    在加载httpd.conf时提示so插件不能加入服务,保护拒绝。这是因为这些编译的so文件保留原来的安全策略或继承了安装目录的安全性策略,被SELinux拒绝了。这里分二种情况,如果原来的文件没有安全性脉络则可以通过restorecon撤消缺省的安全性脉络。
    restorecon -Rv -n /usr/apache/modules/mod_rewrite.so
    第二种情况是原来的源文件有其它的安全性脉络,而没有继承原来的缺省的安全性,则需要通过chcon来更改:

    chcon -Rtf httpd_sys_content_t xxx.so

    或chcon -Rtf texrel_shlib_t mod_rewrite.so

    具体的content参数输入(如果没有semanage则需yum install)

    # semanage fcontext -l |grep httpd_sys

    查看。这时你可以在/usr/apache/modules里查看各个so库文件的文件属性了
    ls -laZ
    不出意外,各个文件的安全性都没问题。但还是别高兴得太早。

    # service httpd start

    cannot restore segment prot after reloc: Permission denied

    某些文件还是拒绝了!我等菜菜鸟还是别折腾了。直接

    /usr/sbin/setenforce 0

    降低SELinux的安全性检查算了。

    [不能访问apache?]
    更改httpd的SELinux设置
    setsebool -P httpd_enable_homedirs 1

    setsebool -P httpd_read_user_content 1

    setsebool -P httpd_use_nfs 1

    查看更改内容

    getsebool -a | grep httpd

    更改DocumentRoot目录权限,注意,因为对于files方式工作的session,它还需要写权限
    chomd -Rcf o+wr /www/html
    更改php-cgi权限

    chomd -Rcf u+x /usr/local/php/bin/php-cgi

    检查mod_fcgid的模块名是否正确

    LoadModule fcgid_module modules/mod_fcgid.so

    // ...other code

    <IfModule fcgid_module>

    FcgidInitialEnv PHPRC /etc/php.ini

    ...

    </IfModule>

    主目录/www/html是否添加了ExecCGI选项

    <Directory /www/html>

    AddHandler fcgid-script .fcgi .php

    AddType application/x-httpd-php .php

    Options Indexes FollowSymLinks Includes ExecCGI

    ...

    </Directory>

    在调试阶段,最好添加一个mod_status.so模块,以对照配置
    LoadModule status_module modules/mod_status.so

    ...

    <IfModule status_module>

    ExtendedStatus On

    </IfModule>

    <Location /server-info>

    SetHandler server-info

    //...other code

    Allow from 127.0.0.1

    </Location>

    然后在浏览器中输入127.0.0.1/server-info查看apache配置

    [httpd dead but subsys locked]
    今天,除了看看快播、装了2小时而又出错的实况2013外。几乎花了整整一天的时间解决centos 6.5上的各种各样的apache问题。可以httpd dead but subsys locked的问题只出现在通过yum install的apache。
    好了,安装完apache后,启动查看
    # sudo service httpd start
    Starting httpd: [ OK ]

    # service httpd status
    httpd dead but subsys locked

    擦,httpd竟然不是running。于是各种检查系统与httpd.conf配置,不行,google之,各种牛头不对马嘴的回答。最终,在这里打到了答案。
    解决方法的核心是pid问题。打开httpd.conf,没有发现httpd.pid,但它又确实存在,在哪?在我的安装目录

    /var/local/apache/run/httpd.pid

    这个pid与subsys/httpd运行的是对不上的。更改之,httpd.conf添加

    PidFile /var/run/httpd.pid

    然后,找到/etc/sysconfig/httpd,改写(去掉注释)

    PIDFILE=/var/run/httpd.pid

    关闭原来的httpd进程

    # killall -9 httpd

    删掉httpd进程中的锁定

    #rm -rf /var/lock/subsys/httpd

    可以重启httpd了

    # service httpd restart
    Stopping httpd: [ FAILED ]
    Starting httpd: [ OK ]

    再次检查httpd状态

    service httpd status
    httpd (pid 3037) is running...


    [file exists:mod_fcgid:can't create shared memory]问题
    这个问题困扰了我好几天。答案却很简单。
    正题。mod_fcgid是apache一个很重要的模块,它可以解决apache处理web请求的方式。之前apache处理php请求时,是每个请求启动一个进程,脚本处理完毕结束进程,这种方式效率低、当大访问量时资源占用多。后来有人发明了一种fastcgi的方式,通过一个长贮的进程池来集中分配request,request之间共享内存,而进程独立,它与server独立,起到一个分发request给server的作用。它具有资源占用低,效率高的优点,常为现代web server所用。mod_fcgid现为apache团队在维护,稳定性有保障。
    说说mod_fcgid中FcgidProcessTableFile与FcgidIPCDir参数的说明
    FcgidProcessTableFile

    Description: shared memory file path
    Syntax: FcgidProcessTableFile pathname
    Default: FcgidProcessTableFile logs/fcgid_shm
    Context: server config
    Status: External
    Module: mod_fcgid
    mod_fcgid在unix中用来与httpd进程的共享内存,以维持运行状态。此指令指定共享内存文件的名称
    FcgidIPCDir

    Description: directory for AF_UNIX sockets (Unix) or pipes (Windows)
    Syntax: FcgidIPCDir pathname
    Default: FcgidIPCDir logs/fcgidsock
    Context: server config
    Status: External
    Module: mod_fcgid
    模块使用的AF_UNIX socket或命名的管道,取决于平台,用以与FASTCGI程序通信。指令指定socket或命名管道需要在哪个路径中建立。
    这两个参数存在一个问题,就是路径一定要建立在/var/run下面。比如
    FcgidProcessTableFile /var/fun/httpd/fcgidsock
    FcgidIPCDir /var/run/httpd/fcgid_shm
    不然mod_fcgid会自己到/var/run路径查找,如果path不存在则不会启动fcgid模块,当然,它不会提醒你目录有问题,而是出现...[emeg](17)file exists:mod_fcgid:can't create shared memory xxx bytes的错误。这点apache官方中的mod_fcgid指南并没有说明。
    这个问题我找了很久才清楚。希望有此错误的朋友,上面的提醒可以帮到你。

    [403 forbidden]禁止访问错误
    *unix Apache 我可不提供随便的服务 :)
    不能正常访问原因有很多,需要提醒的一句是,有可能你设置了index文件,但在DocumentRoot下又没有放置,比如缺少index.php,这时需要注释掉
    <Directory /var/www/html>
    #Options Indexes

    # Or

    Options -Indexes

    </Directory>


    [mod_fcgid error reading data from fastcgi server]错误
    这是一个很简单的错误,那就是FcgidWrapper的对象没有执行权限,如果你是按照官方的方法配置
    PHP wrapper script - /usr/local/bin/php-wrapper

    #!/bin/sh
    # Set desired PHP_FCGI_* environment variables.
    # Example:
    # PHP FastCGI processes exit after 500 requests by default.
    PHP_FCGI_MAX_REQUESTS=10000
    export PHP_FCGI_MAX_REQUESTS

    # Replace with the path to your FastCGI-enabled PHP executable
    exec /usr/local/bin/php-cgi
    那么/usr/local/bin/php-wrapper必须有执行权限

    chmod og+x /usr/local/bin/php-wrapper

    还有最好禁止php运行子进程,设置PHP_FCGI_CHILDREN=0,最最需要注意的是,不要开启APC,因为它们的共享内存会冲突。APC发展至今已经穷途末路了,不需要使用。

  • 相关阅读:
    Two Sum II
    Subarray Sum
    Intersection of Two Arrays
    Reorder List
    Convert Sorted List to Binary Search Tree
    Remove Duplicates from Sorted List II
    Partition List
    Linked List Cycle II
    Sort List
    struts2结果跳转和参数获取
  • 原文地址:https://www.cnblogs.com/sumsung753/p/3821496.html
Copyright © 2011-2022 走看看