设为首页 收藏本站
查看: 1287|回复: 0

LNMP高级配置

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-8-24 11:20:30 | 显示全部楼层 |阅读模式
第一部分:完成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 www.iyunv.com;
    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直接就跳转到[url]www.1.com[/url]


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是可以引用的图片
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;
}
测试结果:
[iyunv@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                                        #查看那个脚本运行的时间较长                                                                                                                                         参考
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。



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-103435-1-1.html 上篇帖子: LNMP源码搭建 下篇帖子: 源代码实现LAMP的平台搭建 配置文件 nobody
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表