LNMP高级配置

第一部分:完成LNMP的基础环境搭建


第二部分:nginx


内容一:nginx基础配置

1、nginx基础配置,配置文件在/usr/local/nginx/nginx.conf

配置内容如下:

user nobody nobody;                                                      #运行时使用的用户
worker_processes 2;                                                       #开启的子进程数

wKioL1VUEBbx1vmFAADxk6HX3MQ206.jpg

#主进程必须由root启用,因为需启动80端口,系统使用的端口必须由root启动,端口访问0-1023;

error_log /usr/local/nginx/logs/nginx_error.log crit;
pid /usr/local/nginx/nginx.pid;                                #nginx.pid的位置和安装的时候有关,可通过nginx -V查询
worker_rlimit_nofile 51200;
events
{
    use epoll;                                                           
    worker_connections 6000;                                 #连接数不能设置太大,不然会出现502的情况
}
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;

    include vhosts/*.conf;               #该路径为相对路径,相对于nginx.conf的路径,具体包含那个目录如下第三步。

}

2、配置虚拟主机,虚拟主机的存放目录为/usr/local/nginx/vhosts/下

mkdir /usr/local/nginx/vhosts/

vim server1.conf


server

{

    listen 80;

    server_name localhost;

    index index.html index.htm index.php;

    root /data/www/;              #自定义目录


    location ~ \.php$ {                

        include fastcgi_params;

        fastcgi_pass unix:/tmp/php-fcgi.sock;    #连接方式为sock,如果使用IP,则格式为127.0.0.1:9000

        fastcgi_index index.php;

        fastcgi_param SCRIPT_FILENAME /data/www$fastcgi_script_name;

}

}


注意:“location ~ \.php$建议应用在server配置的最后

内容二:nginx高级配置

1. 验证默认虚拟主机
listen       80 default_server;


nginx可以设置虚拟主机,但是众多主机中哪一个会是默认的呢?一个未指定的域名将访问到哪个主机上呢?nginx 0.8.21 版本开始支持一个指令 default_server只需要在配置虚拟主机时为listen指令 设置 default_server 即可。

示例:


server   

{   

    listen 80 default_server;       # HTTP 的端口, default_server 设置默认站点   

    server_name _;              # 设置绑定的域名 或 _(表示匹配为)   

    index index.html index.htm index.php;      # 设置默认文档   

    root  /www/default;          # 设置站点主目录   

}  

wKiom1VUTf7wkZMpAABHEp-_DOQ281.jpg

由于www.default.com在虚拟主机中,并没有定义server_name,所以就会自动匹配到定义的默认站点下,"_"表示匹配未指定的域名。所谓的指定域名,指的是server_name参数中,是否指定了域名



2. 用户认证
首先需要安装apache,可以使用yum install httpd 安装
生成密码文件,创建用户
htpasswd -c /usr/local/nginx/conf/htpasswd  test // 添加test用户,第一次添加时需要加-c参数,第二次添加时不需要-c参数
在nginx的配置文件中添加
location  / {
                      root /data/www/;
                      auth_basic              "Auth";
                      auth_basic_user_file   /usr/local/nginx/conf/htpasswd;
            }

3. 域名重定向
server_name  www.1.com www.2.com ;

    if ($host != 'www.2.com' ) {
        rewrite  ^/(.*)$  http://www.1.com/$1  permanent;      #permanent表示301永久跳转
    }

浏览器输入www.test.com直接就跳转到www.1.com 

4. 日志相关

4.1 日志切割:
编写脚本:
vim  /usr/local/sbin/logbak.sh  //加入

#! /bin/bash
datedir=`date +%Y%m%d`
/bin/mv /usr/local/nginx/logs/access.log /usr/local/nginx/bak/access_$datedir.log

/bin/mv /usr/local/nginx/logs/error.log /usr/local/nginx/bak/error_$datedir.log

/bin/mv /usr/local/nginx/logs/nginx_error.log /usr/local/nginx/bak/nginx_error$datedir.log

/bin/kill -HUP `cat /var/run/nginx.pid`     #重启nginx.pid,会重新生成各种日志, 注意该目录 路径        

日志格式 

    定义在nginx.conf中,虚拟主机直接调用该格式

log_format main '$remote_addr - $remote_user [$time_local] $request '
                    '"$status" $body_bytes_sent "$http_referer" '
                    '"$http_user_agent" "$http_x_forwarded_for"';                                    #写入到nginx.conf配置文件中



log_format main1 '$proxy_add_x_forwarded_for - $remote_user [$time_local] ' 
                      '"$request" $status $body_bytes_sent '
                      '"$http_referer" "$http_user_agent"';  //此日志格式为,ip不仅记录代理的ip还记录远程客户端真实IP。

access_log 才能条用log_format定义的格式,如 access_log /data/www/log/access_log main

error_log 以及定义好了相关的日志级别,使用如下所示,error只能跟相应的级别

错误日志error_log日志级别 

error_log 级别分为 debug, info, notice, warn, error, crit  默认为crit, 该级别在日志名后边定义格式如下:
error_log  /your/path/error.log crit;  
crit 记录的日志最少,而debug记录的日志最多。如果你的nginx遇到一些问题,比如502比较频繁出现,但是看默认的error_log并没有看到有意义的信息,那么就可以调一下错误日志的级别,当你调成error级别时,错误日志记录的内容会更加丰富。

5. 静态文件不记录日志,配置缓存
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$     #~表示匹配
{
         expires      30d;                                     #expires  表示缓存的时间
         access_log off;
}

location ~ .*\.(js|css)?$                          #根据js或者css的格式,写相应的匹配语句
{
         expires      12h;
         access_log off;

}

6. 防盗链
在 nginx.conf中的server部分中添加如下代码 
location ~* ^.+\.(gif|jpg|png|swf|flv|rar|zip|doc|pdf|gz|bz2|jpeg|bmp|xls)$ {   
                valid_referers none blocked server_names  *.taobao.com *.baidu.com *.google.com *.google.cn *.soso.com ;  // 对这些域名的网站不进行盗链。
                if ($invalid_referer) {
#                        return 403;
                        rewrite ^/ http://www.1.com/static/image/common/logo.png;
                        }
                }

说明:(本环节的域名为www.test.com)

1、在配置文件中,同一个server配置不同域名,测试防倒链是不成功的。

2、valid_referers只运行那些域名可以访问该网站的图片,如在*.taobao.com是可以引用www.test.com/a.jpg的图片

3、none:表示直接访问图片地址,blocked表示被防火墙添加的referer,server_names指的是对应可以访问的域名


7.针对目录限制php解析

location ~ .*(diy|template|attachments|forumdata|attachment|image)/.*\.php${

        deny all;

}

注意:diy|template等指的是某个网站目录;该location必须应用在 “ location ~ \.php$”前,不然不生效。


8.根据user_agent控制

if ($http_user_agent ~ 'bingbot/2.0|MJ12bot/v1.4.2|Spider/3.0|YoudaoBot|Tomato|Gecko/20100315'){

       return 403;

}

测试结果:

[root@localhost www]# curl -x192.168.1.107:80 www.1.com -I -A 'bingbot/2.0'

HTTP/1.1 403 Forbidden

-A:表示使用的的user_agent


9.访问控制

黑名单

   deny 127.0.0.1;

   allow all;

白名单

    allow 127.0.0.1;

    allow 192.168.31.141;

    deny all;                   #是server下配置,基于全局配置

------------------------------

 location /uc_server/ {

        allow 192.168.31.0/24;

        deny all;

    }                        #基于具体目录的控制


10.基于url内容的控制

if ($document_uri !~ 'abc')    

{

   return 403;                  #或者rewrite到其他url

}



    

第三部分:php-fpm 配置


内容一:配置php-fpm,相当于配置一个pool

vim   /usr/local/php/etc/php-fpm.conf     //把之前的内容清空,然后写入如下配置:

[global] 
pid = /usr/local/php/var/run/php-fpm.pid               #PID的确定位置,如图所示,是默认的php-fpm配置文档 

wKiom1VUPpizG5qXAABf9Pfy6uA200.jpg

error_log = /usr/local/php/var/log/php-fpm.log 
[www] 
listen = /tmp/php-fcgi.sock                                      #一个运行池的表示,如果要使用global地址池,在nginx的虚拟主                                                                                     机配置的fastcgi_pass参数设置为该值
user = php-fpm                                                       #该用户为运行php-fpm,自行建立                                  
group = php-fpm
listen.owner = nobody                                            #和后面的nginx的一致
listen.group = nobody                                            #同上
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

killall php-fpm

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


慢执行日志
slowlog = /path/to/slow.log                                        #查看那个脚本运行的时间较长                                                                                                                                         参考http://www.jb51.net/article/50408.htm
request_slowlog_timeout = 1

open_basedir                                                             #限制运行的目录
php_admin_value[open_basedir]=/data/www/:/tmp/


-----------------------------------------------------------------

动态、静态子进程pm = static/dynamic
如果选择static,则由pm.max_children指定固定的子进程数。
如果选择dynamic,则由以下参数决定:
pm.max_children ,子进程最大数
pm.start_servers ,启动时的进程数
pm.min_spare_servers ,保证空闲进程数最小值,如果空闲进程小于此值,则创建新的子进程
pm.max_spare_servers ,保证空闲进程数最大值,如果空闲进程大于此值,此进行清理
对于专用服务器,pm可以设置为static。






你可能感兴趣的:(LNMP高级应用)