centos安装nginx、mysql、php的方法(lnmp)

对于lnmp的安装,每个运维人员可能都进行过上百次。这里提供一个我认为最简单高效的安装方案。

1.升级yum到最新版本:

 代码如下 复制代码

yum -y update

2.用yum对lnmp服务器依赖的组件进行安装:

 代码如下 复制代码

LANG=C

yum -y install gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel libidn libidn-devel openssl openssl-devel openldap openldap-devel nss_ldap openldap-clients openldap-servers

3.用yum安装php、mysql客户端和服务端、php-fastcgi和常用的php组件:

 代码如下 复制代码

yum -y install php mysql mysql-server mysql-devel php-mysql php-cgi php-mbstring php-gd php-fastcgi php-fpm

4.用yum安装nginx,但yum默认源没有nginx,需要更改为nginx官方地址:

 代码如下 复制代码

wget wget http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm

rpm -ivh nginx-release-centos-6-0.el6.ngx.noarch.rpm

5.用yum安装nginx:

 代码如下 复制代码

yum install nginx

6.设置nginx自动启动:

 代码如下 复制代码

chkconfig nginx on

chkconfig php-fpm on

chkconfig mysqld on

7.用以下命令分别启动三个服务:

 代码如下 复制代码

nginx

php-fpm &

service mysqld start

 

以上所有安装完毕。最后打开nginx配置文件,设置php-fpm,在nginx配置文件中server内加入以下内容(注意更改fastcgi_param的路径为自己的路径):

 代码如下 复制代码

location ~ .php$ {

root html;

fastcgi_pass 127.0.0.1:9000;

fastcgi_index index.php;

fastcgi_param SCRIPT_FILENAME /opt/www$fastcgi_script_name;

include fastcgi_params;

}

安装完成,创建phpinfo查看。

整个过程在网络良好的情况下花费5分钟以内。网络不好的同学请更新yum源到网易的源,速度很快。

后了后面我们再看一些nginx安全配置

做过虚拟主机的都知道,Apache有一个很好用的地方---配置php_admin_value,在里面配置一下open_basedir就可以了,但是Nginx却没有这样的设置,但是没有设置这项,一旦某用户上传了一个phpspy之类的东西,其他用户数据就遭殃了,今天就来解决这样的问题,怎么样让用户无法旁注。

首先,需要在php.ini 设置open_basedir的值,比如网站目录全部在 /data/web/ 下面,例如 /data/web/xxx.com/ 下面是xxx.com网站 那么我可以设置 open_basedir="/data/web/:/tmp/" (注意,/tmp 必须设置,否则影响上传文件,如果你设置了 upload_tmp_dir ,那么把/tmp设置成 upload_tmp_dir 的值)

然后执行

 代码如下 复制代码

# chmod 755 -R /data/web/
# chmod 711 /data/web/

这时,网站依然能访问,可是你试试上传一个phpspy,看看还能列 /data/web/的目录么?

但是问题又来了,如果说/data/web/下目录命名非常有规律,很容易被猜解到,直接输入 /data/web/xxx.com 就可以列别人的目录,别急,还有办法,把 /data/web/xxx.com 重命名为复杂的名字,比如 /data/web/xxx.com_2a8b4c76  再把display_errors 关闭

现在我们再配置防跨站

测试环境为lnmp一键安装包环境。请根据自己的环境替换相关命令。

 代码如下 复制代码

tar zxvf php-5.2.17.tar.gz
gzip -cd php-5.2.17-fpm-0.5.14.diff.gz | patch -d php-5.2.17 -p1 //打完fpm补丁后再修改php源程序
cd php-5.2.17/
wget -c http://soft.vpser.net/web/php/bug/php-5.2.17-max-input-vars.patch //hash dos漏洞补丁
patch -p1 < php-5.2.17-max-input-vars.patch
./buildconf --force
./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --with-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --with-iconv-dir --with-freetype-dir --w
ith-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-discard-path --enable-magic-quotes --enable-safe-mode --enable-bcmath --enable-shmop --enable-sy
svsem --enable-inline-optimization --with-curl --with-curlwrappers --enable-mbregex --enable-fastcgi --enable-fpm --enable-force-cgi-redirect --enable-mbstring --with-mcrypt --enable-ftp --with-gd
--enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-xmlrpc --enable-zip --enable-soap --without-pear --with-gettext --with-mime-magic

vi main/fopen_wrappers.c
找到

 代码如下 复制代码

/* {{{ php_check_open_basedir
*/
PHPAPI int php_check_open_basedir_ex(const char *path, int warn TSRMLS_DC)
{
        /* Only check when open_basedir is available */
        if (PG(open_basedir) && *PG(open_basedir)) {
                char *pathbuf;
                char *ptr;
                char *end;
                // add by anxsoft.com
                char *env_doc_root;
                if(PG(doc_root)){
                        env_doc_root = estrdup(PG(doc_root));
                }else{
                        env_doc_root = sapi_getenv("DOCUMENT_ROOT", sizeof("DOCUMENT_ROOT")-1 TSRMLS_CC);
                }
                if(env_doc_root){
                        int        res_root = php_check_specific_open_basedir(env_doc_root, path TSRMLS_CC);
                        efree(env_doc_root);
                        if (res_root == 0) {
                                return 0;
                        }
                        if (res_root == -2) {
                                errno = EPERM;
                                return -1;
                        }
                }
                // add by anxsoft.com

 

                pathbuf = estrdup(PG(open_basedir));

                ptr = pathbuf;

                while (ptr && *ptr) {
                        end = strchr(ptr, DEFAULT_DIR_SEPARATOR);
                        if (end != NULL) {
                                *end = '';
                                end++;
                        }

                        if (php_check_specific_open_basedir(ptr, path TSRMLS_CC) == 0) {
                                efree(pathbuf);
                                return 0;
                        }

                        ptr = end;
                }
                if (warn) {
                        php_error_docref(NULL TSRMLS_CC, E_WARNING, "open_basedir restriction in effect. File(%s) is not within the allowed path(s): (%s)", path, PG(open_basedir));
                }
                efree(pathbuf);
                errno = EPERM; /* we deny permission to open it www.111cn.net */
                return -1;
        }

        /* Nothing to check... */
        return 0;
}
/* }}} */

红字是修改加上去的

保存退出后再编译安装

make ZEND_EXTRA_LIBS='-liconv'
make install

最后不要忘了将php.ini中的open_basedir改为:open_basedir = "/var/tmp/:/tmp/"

 删除不需要的Nginx模块

  我们可能根据我们的需要配置Nginx,当然在编译时可以选择某些不需要的模块不编译进去,比如精简掉autoindex和SSI模块,命令如下:

  ./configure --without-http_autoindex_module --without-http_ssi_module

  make

  make install

  当然在编译前可以通过下面的命令查看那些模块是可以开启或者关闭的:

  ./configure --help | less

修改Nginx服务器名称和版本号

  著名的NETCRAFT网站可以很轻松的查到你服务器的操作系统和服务程序版本,或者HTTP Response Header也能向我们透露这些信息,很多情况下,这些信息将为黑客进行攻击提供依据,因此我们需要对其进行伪装。

  编译Nginx源文件src/http/ngx_http_header_filter_module.c,输入以下命令:

  vi +48 src/http/ngx_http_header_filter_module.c

  找到下面两行:

 代码如下 复制代码

  static char ngx_http_server_string[] = "Server: nginx" CRLF;

  static char ngx_http_server_full_string[] = "Server: "NGINX_VER CRLF;

  改成如下,当然具体显示什么你可以自己定义:

 代码如下 复制代码

  static char ngx_http_server_string[] = "Server: NOYB" CRLF;

  static char ngx_http_server_full_string[] = "Server: NOYB" CRLF;

 修改Nginx配置文件

  3.1 避免缓冲区溢出攻击

  修改nginx.conf并且为所有客户端设置缓冲区大小限制:

  vi /usr/local/nginx/conf/nginx.conf

  编辑并且设置如下:

 代码如下 复制代码

  ## Start: Size Limits &Buffer Overflows ##

  client_body_buffer_size 1K;

  client_header_buffer_size 1k;

  client_max_body_size 1k;

  large_client_header_buffers 2 1k;

  ## END: Size Limits &Buffer Overflows ##

  当然也许你还需要配置下面的内容以便于改善服务器性能:

 代码如下 复制代码

  ## Start: Timeouts ##

  client_body_timeout 10;

  client_header_timeout 10;

  keepalive_timeout 5 5;

  send_timeout 10;

  ## End: Timeouts ##

  3.2 限制一些访问

  仅允许访问我们指定的域名,避免有人扫描绑定当前IP的所有域名,或者避免直接的IP访问以及恶意的域名绑定:

 代码如下 复制代码

  ## Only requests to our Host are allowed

  ## i.e. nixcraft.in, images.nixcraft.in and www.nixcraft.in

  if ($host !~ ^(nixcraft.in|www.nixcraft.in|images.nixcraft.in)$ ) {

  return 444;

  }

  ##

  当然,网上还流传这么个写法:

 代码如下 复制代码

  server {

  listen 80 default;

  server_name _;

  return 500;

  }

  限制一些方法,一般GET和POST已经够我们用了,其实HTTP还定义有类似于DELETE、SEARCH等方法,用不到的话就拒绝这些方法访问服务器:

 代码如下 复制代码

  ## Only allow these request methods ##

  if ($request_method !~ ^(GET|HEAD|POST)$ ) {

  return 444;

  }

  ## Do not accept DELETE, SEARCH and other methods ##

时间: 2024-09-20 00:25:31

centos安装nginx、mysql、php的方法(lnmp)的相关文章

CentOS 安装 Nginx服务器环境方法

#CentOS 安装 Nginx 服务器# 1.如果没有安装 GCC 开发工具请先安装:yum groupinstall -y "Development Tools" 2.下载新版本的 nginx:http://nginx.org/en/download.html, 下载到本地:wget http://nginx.org/download/nginx-1.4.3.tar.gz 3.解压源码包:tar zxvf nginx-1.4.3.tar.gz 4.进入解压出来的源码文件夹:cd n

CentOS下重启Mysql的各种方法(推荐)

1.通过rpm包安装的MySQL service mysqld restart /etc/inint.d/mysqld start 2.从源码包安装的MySQL // Linux关闭MySQL的命令 $mysql_dir/bin/mysqladmin -uroot -p shutdown // linux启动MySQL的命令 $mysql_dir/bin/mysqld_safe & 其中mysql_dir为MySQL的安装目录,mysqladmin和mysqld_safe位于MySQL安装目录的

CentOS安装Nginx

一.安装准备   首先由于nginx的一些模块依赖一些lib库,所以在安装nginx之前,必须先安装这些lib库,这些依赖库主要有g++.gcc.openssl-devel.pcre-devel和zlib-devel 所以执行如下命令安装   [html] view plaincopy $   yum install gcc-c++   $   yum install pcre pcre-devel   $   yum install zlib zlib-devel   $   yum inst

centos安装nginx+php+mysql方法详解

系统:centos 5.9 64位 需要的软件:libiconv-1.14.tar.gz mysql-5.5.25a.tar.gz 1.安装前的准备 2.安装libiconv  代码如下 复制代码 1 ./configure --prefix=/usr/local/libiconv  2 make && make install 3.只安装mysql客户端  代码如下 复制代码 1 cmake . && make mysqlclient libmysql  2 make i

centos下 nginx+mysql+bugfree+php安装

  bugfree是一个bug管理工具.由淘宝开发的并且是开源的工具.淘宝官方有提供安装方法:http://testing.etao.com/node/120.通过XAMPP来安装非常方便.但是XMAPP会一次性把mysql/php/apache/bugfree全部安装.但是我当前的机子上已经安装了nginx/mysql/所以思考之后还是决定自己手动安装.于是噩梦来了.我整整花了两天半的时间搞这个. 软件: mysql5.5.28 php-5.2.13.tar.gz php-5.2.13-fpm

CentOS 6.3中配置安装nginx php-fpm drupal的方法

一切本着从简原则来做,能yum/rpm的,坚决不手工编译,本次部署环境基于CentOS 6.3 x86_64系统. 更新yum  代码如下 复制代码 [root@imysql ~]# yum -y update [root@imysql ~]# yum install libaio-devel.x86_64 安装curl模块  代码如下 复制代码 [root@imysql ~]# yum install curl-devel [root@imysql ~]# yum -y install lib

CentOS6.6 32位 Minimal版本纯编译安装Nginx Mysql PHP Memcached

声明:部分编译指令在博客编辑器里好像被处理了,如双横线变成单横线了等等,于是在本地生成了一个pdf版本,在下面地址可以下载. LNMP+Memcached CentOS是红帽发行的免费的稳定Linux版本,在企业服务器应用中都会选用Minimal版本,因为Minimal是CentOS"最纯洁"的服务器系统,因为Minimal版本连vim编辑器都需要自己安装,Minimal组件最少,无桌面,扩展灵活,非常适合做服务器. 1.配置网卡 Minimal版本的CentOS被安装后,网卡驱动默认

Debian编译安装Nginx+MySQL+PHP-FPM环境详解

Linux环境:Debian 6 Stable 程序版本选择: Nginx:Tengine 1.2.4 淘宝出品,基于Nginx并引进了一些新特性 MySQL:5.1.66 5.1系列最新版.不用5.5的原因是5.5开始编译使用CMake,而资料比较少.(事实上wangyan的脚本使用的是5.5,但是当时我还没看到--) PHP:5.4.9 前几天刚出的Current Stable,自带FPM,与Nginx配合良好. 参考资料: 主要参考军哥的lnmp脚本和wangyan的lanmp脚本.军哥的

CentOS 安装配置 Mysql 数据库。

centos 安装 Mysql 数据库.   安装mysql 命令和mysql服务器.yum install mysql mysql-server     然后设置 mysql 编码     vi /etc/my.cnf 在[mysqld]下添加 default-character-set = utf8   在末尾添加 [mysql] default-character-set = utf8   #然后开始启动mysql   service mysqld start   #设置MySQL服务随系