fdgg888 发表于 2015-9-6 11:17:04

LNMP第二部分nginx、php配置

内容概要:   
一. nginx.conf   
vim /usr/local/nginx/conf/nginx.conf //清空原来的配置,加入如下内容:   
[root@centos-03 conf]# echo1 >/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;   
    }   
}   
}   
二. php-fpm.conf   
vim   /usr/local/php/etc/php-fpm.conf   //把之前的内容清空,然后写入如下配置:   
   
pid = /usr/local/php/var/run/php-fpm.pid   
error_log = /usr/local/php/var/log/php-fpm.log   
   
listen = /tmp/php-fcgi.sock   
user = php-fpm   
group = php-fpm   
listen.owner = nobody
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   
配置多个pool   
   
...   
...   
   
...   
...   
...   
   
...   
...   
...   
listen = /tmp/php-fcgi.sock      用处不同池子 对应不同 的域名   也可以共享一个池子
111.com   listen = /tmp/php-fcgi.sock
222.com   listen = /tmp/php-fcgi2.sock   
333.com   listen = /tmp/php-fcgi3.sock   
慢执行日志   
slowlog = /path/to/slow.log   
request_slowlog_timeout = 1   
open_basedir   
php_admin_value=/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。   
[root@centos-03 etc]# /usr/local/php/sbin/php-fpm-t
[root@centos-03 etc]# /etc/init.d/php-fpm restart   
三. nginx高级配置   
1. 配置第二个虚拟主机   
可以在nginx.conf 加一行
/usr/local/nginx/conf/vhosts
includeconf/vhosts/*.conf;   
这样,我们就可以在 conf/vhosts目录下创建虚拟主机配置文件了。   
vimconf/vhosts/111.conf   // 加入   
server   
{   
    listen 80;   
    server_name 111.com;   
    index index.html index.htm index.php;   
    root /data/www2;   
    location ~ \.php$ {   
      include fastcgi_params;   
      fastcgi_pass unix:/tmp/php-fcgi.sock;   
      fastcgi_index index.php;   
      fastcgi_param SCRIPT_FILENAME /data/www2$fastcgi_script_name;   
    }   
}   
2. 验证默认虚拟主机   
listen       80 default_server;
[root@centos-03 vhosts]# /usr/local/nginx/sbin/nginx-t   
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok   
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful   
[root@centos-03 vhosts]#
3. 用户认证   
首先需要安装apache,可以使用yum install httpd 安装   
生成密码文件,创建用户   
htpasswd -c /usr/local/nginx/conf/htpasswdtest // 添加test用户,第一次添加时需要加-c参数,第二次添加时不需要-c参数   
在nginx的配置文件中添加   
location/ {   
                      root /data/www/wwwroot/count;   
                      auth_basic            "Auth";   
                      auth_basic_user_file   /usr/local/nginx/conf/htpasswd;   
            }   
4. 域名重定向   
server_nameaminglinux.comwww.aminglinux.com;   
    if ($host != 'www.aminglinux.com' ) {   
      rewrite^/(.*)$http://www.aminglinux.com/$1permanent;   
    }   
5. 日志相关   
日志切割:   
编写脚本:
vi/usr/local/nginx/logs/nginx_log.sh   
#nginx日志切割脚本   
#author: http://www.nginx.cn   
#!/bin/bash   
#设置日志文件存放目录   
logs_path="/usr/local/nginx/logs/"   
#设置pid文件   
pid_path="/usr/local/nginx/logs/nginx.pid"   
#重命名日志文件   
mv ${logs_path}access.log ${logs_path}access_$(date -d "yesterday" +"%Y%m%d").log   
#向nginx主进程发信号重新打开日志   
kill -USR1 `cat ${pid_path}`
crontab 设置作业
0 0 * * * bash /usr/local/nginx/logs/nginx_log.sh
vim/usr/local/sbin/logrotate.sh//加入   
#! /bin/bash   
datedir=`date +%Y%m%d`   
/bin/mkdir/home/logs/$datedir >/dev/null 2>&1   
/bin/mv /home/logs/*.log /home/logs/$datedir   
/bin/kill -HUP `cat /var/run/nginx.pid`   
日志格式   
log_format main '$remote_addr - $remote_user [$time_local] $request '   
                  '"$status" $body_bytes_sent "$http_referer" '   
                  '"$http_user_agent" "$http_x_forwarded_for"';   
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。   
错误日志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级别时,错误日志记录的内容会更加丰富。   
6. 静态文件不记录日志,配置缓存   
      location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$   
      {   
                expires      30d;   
                access_log off;   
      }   
      location ~ .*\.(js|css)$   
      {   
                expires      12h;   
                access_log off;   
      }   
7. 防盗链   
在 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.example.com/nophoto.gif;   
                        }   
                }   
说明:如果前面配置中已经加了               location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$   
                         {   
                                 expires      30d;   
                                 access_log off;   
                         }   
那么会和这一部分重复,这时候上面的生效,所以,我们需要把两者合在一起。如下:   
location ~* ^.+\.(gif|jpg|png|swf|flv|rar|zip|doc|pdf|gz|bz2|jpeg|bmp|xls)$   
{   
         expires 30d;   
         valid_referers none blocked server_names*.taobao.com *.baidu.com *.google.com *.google.cn *.soso.com ;// 对这些域名的网站不进行盗链。   
         if ($invalid_referer) {   
#               return 403;   
                  rewrite ^/ http://www.example.com/nophoto.gif;   
          }   
          access_log off;   
}   
8. 访问控制   
限制只让某个ip访问   
    allow          219.232.244.234;   
    deny         all;   
禁止某个IP或者IP段访问站点的设置方法   
首先建立下面的配置文件放在nginx的conf目录下面,命名为deny.ip   
catdeny.ip   
deny 192.168.1.11;   
deny 192.168.1.123;   
deny 10.0.1.0/24;   
在nginx的配置文件nginx.conf中加入:   
include deny.ip;   
重启一下nginx的服务:/usr/local/nginx/sbin/nginxreload 就可以生效了。   
deny.ip 的格式中也可以用deny all;   
如果你想实现这样的应用,除了几个IP外,其他全部拒绝,   
那需要你在deny.ip 中这样写   
allow 1.1.1.1;   
allow 1.1.1.2;   
deny all;   
有时候会根据目录来限制php解析:   
location ~ .*(diy|template|attachments|forumdata|attachment|image)/.*\.php$   
{   
      deny all;   
}   
使用 user_agent 控制客户端访问   
location /   
{   
    if ($http_user_agent ~ 'bingbot/2.0|MJ12bot/v1.4.2|Spider/3.0|YoudaoBot|Tomato|Gecko/20100315'){   
            return 403;   
    }   
}   
9. nginx的rewrite应用   
Rewrite设置及示例 http://www.lishiming.net/thread-239-1-1.html   
nginx $document_uri 参数使用 http://www.lishiming.net/thread-993-1-1.html   
nginx的301与302如何配置 http://www.lishiming.net/thread-4840-1-1.html   
nginx rewrite不支持if 嵌套也不支持逻辑或和逻辑并http://www.lishiming.net/thread-4842-1-1.html   
10. nginx 代理   
server {   
            listen 80;   
            server_name aaa.com;   
            location / {   
                proxy_pass      http://2.2.2.2/;   
                proxy_set_header Host   $host;   
                proxy_set_header X-Real-IP      $remote_addr;   
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;   
            }   
#            access_log/home/logs/aaa_access.log combined;   
      }   
如果后端的机器有多台   
upstream bbb   
{   
            server1.2.3.1:80;   
            server1.2.3.4:80;   
}   
server {   
      listen 80;   
      server_name bbb.com;   
      location / {   
                proxy_pass      http://bbb/;   
                proxy_set_header Host   $host;   
                proxy_set_header X-Real-IP      $remote_addr;   
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;   
      }   
#            access_log/home/logs/bb_access.log combined;   
}   
代理一个服务器上所有域名   
首先在vhosts目录下需要建立两个文件,一个是servername 列表文件,一个是虚拟主机配置文件   
两个文件内容分别为   
(1) servername   
server_name www.123.net.cn www.alsdjfl.com www.asdfa1.com;//就这么简单一行,当然这个server_name 还可以继续添加的   
(2) 虚拟主机配置文件   
server {   
            listen 80;   
            include vhosts/servername; // 这里的文件就是上边那个servername列表文件   
            location / {   
                proxy_pass   http://1.2.1.2/;//这里就是需要做代理的服务器ip地址了   
                proxy_set_header Host   $host;   
                proxy_set_header X-Real-IP      $remote_addr;   
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;   
            }   
            access_log/dev/null;   
      }   
页: [1]
查看完整版本: LNMP第二部分nginx、php配置