首页 > 代码库 > lnmp平台菜鸟入门级笔记

lnmp平台菜鸟入门级笔记

              LNMP平台搭建

 

Mysql安装 同lamp 不多说

wget  http://mirrors.sohu.com/mysql/MySQL-5.1/mysql-5.1.73-linux-x86_64-glibc23.tar.gz

PHP安装

5.下载php:wget http://am1.php.net/distributions/php-5.3.27.tar.gz

6..解压:tar -xvzf php-5.3.27.tar.gz

7.提前安装依赖软件

yum install -y libxml2-devel

yum install -y openssl openssl-devel

yum install -y bzip2 bzip2-devel

yum install -y libpeng libpng-devel

yum install -y libpng libpng-devel

yum install -y freetype freetype-devel

yum install -y epel-release

yum install -y libmcrypt-devel

yum install -y libtool-ltdl-devel

 

编译安装 

 ./configure \

--prefix=/usr/local/php \

--with-config-file-path=/usr/local/php/etc \

--enable-fpm \

--with-fpm-user=php-fpm \

--with-fpm-group=php-fpm \

--with-mysql=/usr/local/mysql \

--with-mysql-sock=/tmp/mysql.sock \

--with-libxml-dir \

--with-gd \

--with-jpeg-dir \

--with-png-dir \

--with-freetype-dir \

--with-iconv-dir \

--with-zlib-dir \

--with-mcrypt \

--enable-soap \

--enable-gd-native-ttf \

--enable-ftp \

--enable-mbstring \

--enable-exif \

--enable-zend-multibyte \

--disable-ipv6 \

--with-pear \

--with-curl \

--with-openssl

make && make install

 

8.修改php配置文件

cp php.ini-production /usr/local/php/etc/php.ini

vim /usr/local/php/etc/php-fpm.conf

[global]

pid = /usr/local/php/var/run/php-fpm.pid

error_log = /usr/local/php/var/log/php-fpm.log

[www]

listen = /tmp/php-fcgi.sock

user = php-fpm

group = php-fpm

pm = dynamic

pm.max_children = 50

pm.start_servers = 20

pm.min_spare_servers = 5

pm.max_spare_servers = 35

pm.max_requests = 500

rlimit_files = 1024

Php-fpm.conf 文件为php进程配置文件。Aphache调启用php处理时启用的php子进程都是有这个文件控制。

详解配置文件于nginx 虚拟主机有关

PHP配置文件

/usr/local/php/sbin/php -fpm -t 测试

/usr/local/php/sbin/php-fpm -c /usr/local/php/etc/php.ini -y /usr/local/php/etc/php-fpm.conf -t

重要目录:

/usr/local/php/sbin/php-fpm

/usr/local/php/etc/php-fpm.conf

/usr/local/php/etc/php.ini

启动php-fpm

/usr/local/php/sbin/php-fpm

/usr/local/php/sbin/php-fpm -c /usr/local/php/etc/php.ini -y /usr/local/php/etc/php-fpm.conf -t

关闭:php-fpm

重启:kill -USR2 `cat /usr/local/php/var/run/php-fpm.pid`

 

php-fpm.conf 管理服务配置文件。 php.ini全局配置。

php-fpm.conf配置文件

1.清空原有配置文件。

>/usr/loca/php/etc/php-fpm.conf

2.写入模板文件

Vim /usr/local/php/etc/php-fpm.conf

[global]

pid = /usr/local/php/var/run/php-fpm.pid

error_log = /usr/local/php/var/log/php-fpm.log  错误日志存放区。

[www]可定义。不通站点定义可以定义不同的php进程池。

listen = /tmp/www.sock  监听的不通端口或sock 配置必须和nginx 虚拟主机配置文件中配置相同。不然会提示502错误。

user = php-fpm          

group = php-fpm

Listen.owner = nobody  因为5,3版本之后的版本socket没有权限所以需要我们定义一下。

Listen.group = nobody

pm = dynamic   动态形式启动。 可以配置为静态,如static建议配置为dynamic

pm.max_children = 50  动态最大启动50个子进程。

pm.start_servers = 20  默认开始启动20个

pm.min_spare_servers = 5 空闲时最小启动5个

pm.max_spare_servers = 35  空闲最大启动35个。

pm.max_requests = 500   每一个子进程,生命周期内最多可以接受35个请求自动销毁。

rlimit_files = 1024 每个子进程打开多少个文件句柄。

slowlog = /tmp/www_slow.log 脚本执行追踪日志存放路径。

Reguest_slowlog_timeout = 1 超过1s记录

php_admin_value[open_basedir]=/data/www/:/tmp/

添加性能追踪日志。如在slowlog = /tmp/www_slow.log

                      Reguest_slowlog_timeout = 1 脚本执行超过1s 就去记录日志在/tmp/www_slow.log 这个名字 自定义即可,每一个池子都可以添加不同的日志追踪机制。

Apache可以定义open_basedir nginx下也可以定义open_basedir目录。如:php_admin_value[open_basedir]=/data/www/:/tmp/  把执行php的用户限定在指定目录下,来缩小权限访问范围来达到安全的目的。

注意php5.4版本中定义的默认tmp/sock文件为只读,没有执行权限。如果没有定义listen.owner那么那个nginx调用的时候就没有权限。所以我们的需要定义listen.owner=nobody listen.group=nobody

 

检查配置:/usr/local/php/sbin/php-fpm -t

 

配置启动:cp /usr/local/src/php-5.3.27/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm

chmod 755 /etc/init.d/php-fpm

service php-fpm start

设置开机启动:

chkconfig php-fpm on

ps aux |grep php-fpm

 

安装nginx

Nginx.cof 详解http://www.ha97.com/5194.html

下载nginx

wget http://nginx.org/download/nginx-1.4.4.tar.gz

解压

tar zxvf nginx-1.4.4.tar.gz

 

 

提前安装pcre 组件。

 yum install -y pcre-devel

配置编译

cd nginx-1.4.4

./configure \

--prefix=/usr/local/nginx \

--with-http_realip_module \

--with-http_sub_module \

--with-http_gzip_static_module \

--with-http_stub_status_module  \

--with-pcre

make && make install

编写nginx启动脚本,并加入系统服务。

vim /etc/init.d/nginx

#!/bin/bash

# chkconfig: - 30 21

# description: http service.

# Source Function Library

. /etc/init.d/functions

# Nginx Settings

NGINX_SBIN="/usr/local/nginx/sbin/nginx"

NGINX_CONF="/usr/local/nginx/conf/nginx.conf"

NGINX_PID="/usr/local/nginx/logs/nginx.pid"

RETVAL=0

prog="Nginx"

start() {

        echo -n $"Starting $prog: "

        mkdir -p /dev/shm/nginx_temp

        daemon $NGINX_SBIN -c $NGINX_CONF

        RETVAL=$?

        echo

        return $RETVAL

}

stop() {

        echo -n $"Stopping $prog: "

        killproc -p $NGINX_PID $NGINX_SBIN -TERM

        rm -rf /dev/shm/nginx_temp

        RETVAL=$?

        echo

        return $RETVAL

}

 

reload(){

        echo -n $"Reloading $prog: "

        killproc -p $NGINX_PID $NGINX_SBIN -HUP

        RETVAL=$?

        echo

        return $RETVAL

}

 

restart(){

        stop

        start

}

configtest(){

    $NGINX_SBIN -c $NGINX_CONF -t

    return 0

}

case "$1" in

  start)

        start

        ;;

  stop)

        stop

        ;;

  reload)

        reload

        ;;

  restart)

        restart

        ;;

  configtest)

        configtest

        ;;

  *)

        echo $"Usage: $0 {start|stop|reload|restart|configtest}"

        RETVAL=1

esac

exit $RETVAL

 

 

保存退出更改权限。

chmod 755 /etc/init.d/nginx

chkconfig --add nginx

chkconfig nginx on

 

更改nginx配置

 

> /usr/local/nginx/conf/nginx.conf

vim /usr/local/nginx/conf/nginx.conf

写入如下内容:

user nobody nobody;

worker_processes 2;

error_log /usr/local/nginx/logs/nginx_error.log crit;

pid /usr/local/nginx/logs/nginx.pid;

worker_rlimit_nofile 51200;

events

{

    use epoll;

    worker_connections 6000;

}

http

{

    include mime.types;

    default_type application/octet-stream;

    server_names_hash_bucket_size 3526;

    server_names_hash_max_size 4096;

    log_format combined_realip ‘$remote_addr $http_x_forwarded_for [$time_local]‘

    ‘$host "$request_uri" $status‘

    ‘"$http_referer" "$http_user_agent"‘;

    sendfile on;

    tcp_nopush on;

    keepalive_timeout 30;

    client_header_timeout 3m;

    client_body_timeout 3m;

    send_timeout 3m;

    connection_pool_size 256;

    client_header_buffer_size 1k;

    large_client_header_buffers 8 4k;

    request_pool_size 4k;

    output_buffers 4 32k;

    postpone_output 1460;

    client_max_body_size 10m;

    client_body_buffer_size 256k;

    client_body_temp_path /usr/local/nginx/client_body_temp;

    proxy_temp_path /usr/local/nginx/proxy_temp;

    fastcgi_temp_path /usr/local/nginx/fastcgi_temp;

    fastcgi_intercept_errors on;

    tcp_nodelay on;

    gzip on;

    gzip_min_length 1k;

    gzip_buffers 4 8k;

    gzip_comp_level 5;

    gzip_http_version 1.1;

    gzip_types text/plain application/x-javascript text/css text/htm application/xml;

server

{

    listen 80;

    server_name localhost;

    index index.html index.htm index.php;

    root /usr/local/nginx/html;

 

    location ~ \.php$ {

        include fastcgi_params;

        fastcgi_pass unix:/tmp/php-fcgi.sock;

        fastcgi_index index.php;

        fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html$fastcgi_script_name;

    }

 

}

}

保存配置后,先检验一下配置文件是否有错误存在:

/usr/local/nginx/sbin/nginx  -t

如果只有一个站点那就无需配置虚拟站点。如果多站点需要将红色字体部分去除,在最后加入include vhosts/*.conf;  (指定虚拟主机的.conf站点配置文件 需要在/usr/local/nginx/conf/ 下创建vhosts目录 在创建虚拟主机站点配置文件如:默认配置文件:default.conf ,及其他站点。默认情况下第一个默认站点禁止访问。)

配置如下:vim default.conf

添加server部分

 

server

{

    listen 80 default_server;

    server_name localhost;

    index index.html index.htm index.php;

    root /tmp/1233;  

    deny all;

   

}

由于默认让其无法访问,所以没有必要配置php解析,删除php解析部分,设置默认访问站点为tmp/1233.并设置其站点目录 为deny all 禁止访问。并创建1233目录 mkdir /tmp/1233

除了默认站点,我配置一下 下一个站点 如域名为test.com 的站点test.conf

Vim test.conf

server

{

    listen 80;

    server_name test.com;

    index index.html index.htm index.php;

    root /data/www;

 

    location ~ \.php$ {

        include fastcgi_params;

        fastcgi_pass 127.0.0.1:9000;

        fastcgi_index index.php;

        fastcgi_param SCRIPT_FILENAME /data/www$fastcgi_script_name;

    }

 

}

保存退出即可。注意网站更目录我没配置的是/data/www  监控为:127.0.0.1:9000 这里可以自定义选择fastcgi_pass unix:/tmp/www.sock; 次出配置必须和php-fpm.conf 进程配置文件配置一样,否则报错502.  注意:每个站点都可单独指定不同的php运行进程数。需要在php-fpm.conf文件中添加。在虚拟站点文件中指定即可。

502错误

502 报错1.定义nginx虚拟主机中监听端口或sock路径配置错误。默认为 127.0.0.1 保持它与php.fpm.conf文件中配置一样。

502 权限问题:版本问题报错502 ,默认sock文件没有执行权限需要在虚拟主机配置文件grup 项后添加:listen.owner = nobody listen.group = nobody

 

 

启动nginx:

service nginx start

ps aux |grep nginx

检查配置文件 重启安装discuz测试 ok

1.nginx 用户认证

虚拟主机配置文件中添加:

location ~ .*admin\.php$ {

        auth_basic "aminglinux auth";

        auth_basic_user_file /usr/local/nginx/conf/.htpasswd;

        include fastcgi_params;

        fastcgi_pass unix:/tmp/www.sock;

        fastcgi_index index.php;

        fastcgi_param SCRIPT_FILENAME /data/www$fastcgi_script_name;

}

设置密码用户添加密码

/ls /usr/local/apache2/bin2/bin/htpasswd 工具创建

如果没有yum install htpasswd -y 安装后设置。

htpasswd -c /usr/local/nginx/conf/.htpasswd aming

New password: 设置密码回车即可。

登录直接下载。

添加配置文件中加载php项-蓝色字体 ,即可解决php解析问题。

2.在虚拟站点配置文件中加入:

if ($host != ‘test.com‘)

    {

        rewrite ^/(.*)$ http://test.com/$1 permanent;

}

保存即可。

配置完成后如下所示:

server

{

    listen 80;

    server_name test.com www.test.com www.aaa.com;

    if ($host != ‘test.com‘)

    {

        f ($host != ‘test.com‘)

    {

        rewrite ^/(.*)$ http://test.com/$1 permanent;

    }rewrite ^/(.*)$ http://test.com/$1 permanent;

    }

    index index.html index.htm index.php;

    root /data/www;

    location ~ .*admin\.php$ {

        auth_basic "aminglinux auth";

        auth_basic_user_file /usr/local/nginx/conf/.htpasswd;

        include fastcgi_params;

        fastcgi_pass unix:/tmp/www.sock;

        fastcgi_index index.php;

        fastcgi_param SCRIPT_FILENAME /data/www$fastcgi_script_name;

}

    location ~ \.php$ {

        include fastcgi_params;

        fastcgi_pass unix:/tmp/www.sock;

        fastcgi_index index.php;

        fastcgi_param SCRIPT_FILENAME /data/www$fastcgi_script_name;

}

302 301 参考文档:http://ask.apelearn.com/question/4840

查看权重百度site:www.aaa.com

2.Nginx配置不记录指定文件类型的日志

Nginx 主配置文件中有:

log_format aming ‘$remote_addr $http_x_forwarded_for [$time_local]‘

 ‘$host "$request_uri" $status‘

 ‘"$http_referer" "$http_user_agent"‘;项

 log_format 日志格式为log_format

 日志名字aming 可自定义。

 $remote_addr 远程ip

 forwarded_for 代理的ip

 [$time_local]‘ 时间。服务器里请求开始写入本地的时间,请求发生时间有前有后,所以会时间顺序前后错乱。

 $http_referer  $http_user_agent 之前提到过apache

 

修改部分:虚拟主机配置文件中:location标签之前加:

 access_log /tmp/access.log aming;

 location ~ .*\.(gif|jpg|jpeg|png|bmg|swf)$

   {

        access_log off;

    }

   loccess_log /tmp/access.log aming;cation ~ (static|cache)

   {

        access_log off;

}

不想记录那些日志都可自定义匹配。保存退出 -t 检测,-s reload加载一下。测试ok

 

Nginx 日志切割

不通apache有切割工具,nginx需要写脚本进行切割。

vim  /usr/local/sbin/nginx_logrotate.sh

#!bin/bash

d=`date -d "-1 day" +%F`

[ -d /tmp/nginx_log ] || mkdir /tmp/nginx_log

mv /tmp/access.log /tmp/nginx_log/$d.log

/etc/init.d/nginx reload >/dev/null

cd /tmp/nginx_log/

gzip -f $d.log

保存退出即可。

sh -x /usr/local/sbin/nginx_logrotate.sh

ls /tmp/nginx_log/ 列出日志压缩文件。

最后写一个计划任务:每天0点0分执行 即可。

 

3.Nginx 静态文件缓存。即缓存过期时间

同样使用location 标签

在虚拟主机配置文件中location中添加 expires xxh/d等如:

Vim test.com

    location ~ .*\.(gif|jpg|jpeg|png|bmg|swf)$

   {

        access_log off;

        expires 15d; 设置gif|jpg|jpeg|png|bmg|swf文件缓存时间为15天。

    }

   location ~ \.(js|css)

    {   access_log off;

        expires 2h; 设置以js /css结尾的文件缓存时间为2小时。

     }

如测试成功

     curl -x127.0.0.1:80 ‘http://test.com/static/image/common/online_admin.gif‘ -I

     查看最大缓存时间。

 

4.Ngin 设置防盗链

 

也是在location 中设置

location 中加入

valid_referers none blocked *.test.com *.aaa.com *.wyl.com;

        if ($invalid_referer)

        {

           return 403;

         }

解释:*.test.com *.aaa.com *.wyl.com; 域名白名单,只有这些域名的网站可以使用test.com图片等。

最终配置如下:location中的条件可以随便添加。

    location ~ .*\.(gif|jpg|jpeg|png|bmg|swf|flv|rar|zip|gz|bz2)$

   {

        access_log off;

        expires 15d;

        valid_referers none blocked *.test.com *.aaa.com *.wyl.com;

        if ($invalid_referer)

        {

           return 403;

         }

    }

保存退出加载后测试

  

1.Nginx 访问控制

根据ip设置访问规则

方法一

根据局部设置可在location 模块中设置想要的限制条件目录

在其后加入allow 192.168.2.192;

           Deny all; (白名单设置)

保存退出即可,如果针对全局可以直接写个Dney 127.0.0.1; 黑名单设置

                                      Dney 192.168.2.0/24; 后面的allow可以省略,如果针对,nginx 不区分allow 与Deny all 的前后顺序而apache不同,它是区分前后顺序的。

测试:curl -x192.168.2.192:80 test.com/admin.php -I 进行测试 符合要求。

 

方法二:在nginx的conf目录下建立deny.ip配置文件

写入:deny 192.168.1.11;

      deny 192.168.1.23;

      deny 192.168.1.2;

或者写:allow 192.168.1.101;

        allow 1.1.1.2;

        aeny all;

其次在虚拟主机配置文件中加入:include deny.ip;

报存,重新加载即可。

 

Nginx 禁止指定user_agent

 

服务器压力过大的情况下或者被一些垃圾搜索引擎抓取,访问,这样就会耗费我们php资源,所以我们可以禁止有道,bin 360等 搜索引擎访问。

配置: 在虚拟主机配置文件中同样在location 中配置:

Location /

{

if ($http_user_agent ~* ‘baidu|sougou|360‘)

     {

    return 403;         

     }  

}

保存退出即可,也可直接去掉location /{}标签,直接if(){} 设置即可如果所示:

 

上面只是以百度,搜狗,360为例,~*不区分大小写匹配。

测试:curl -A "lobaidu" -x192.168.2.192:80 test.com/forum.php -I

 

 

2.nginx代理解释

参考文档:http://www.itnpc.com/news/web/146111097157413.html

conf目录下 新建vim prosy.conf文件并写入配置内容如下

vim prosy.conf

server {

    listen 80;

    server_name www.baidu.com;

     location / {

     proxy_pass http://61.135.169.121;

    #proxy_set_header Host $host;

      }

} 保存退出。没有负载均衡,配置负载均衡需要指定地址池。如:proxy_pass http://www_server_poos; 负载均衡后面再说。

解释:通过prosxy_pass 功能把用户的请求交由上面反向代理upstream定义的www_server_pools服务池处理。服务池名字可以自定义,如aming

安装:dig命令获取域名解析到那些ip。如 dig www.baidu.com  获取百度其他ip地址安装yum install bind*

获取后添加到prosxy_pass 后面。如上所述。

简单负载均衡:配置负载均衡地址池子需要添加upstram xxx(自定义)设置ip或者ip加端口

如:upstream aming {

   server 61.135.169.125:80;

   server 61.135.169.121;

}  proxy_pass http://61.135.169.121;改为proxy_pass http://aming; 指向地址池。后面继续添加proxy_set_header Host $host;项目不然会502错误。

配置如下:

 vim prosy.conf

  upstream aming {

   server 61.135.169.125:80;

   server 61.135.169.121:80;

                }

server {

    listen 80;

    server_name www.baidu.com;

     location / {

     proxy_pass http://aming;

     proxy_set_header Host $host;

              }

       }

简单配置完毕如图所示:

lnmp平台菜鸟入门级笔记