• 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发展至今已经穷途末路了,不需要使用。

  • 相关阅读:
    转载(腾讯云社区)——详解django-apscheduler的使用方法
    pipenv——python包管理工具
    xx系统需求进度02
    xx系统需求进度01
    Hbase简介
    第七周总结
    《软件需求十步走》阅读笔记一
    第六周总结
    HDFS
    金字塔表达方法
  • 原文地址:https://www.cnblogs.com/sumsung753/p/3821496.html
Copyright © 2020-2023  润新知