zoukankan      html  css  js  c++  java
  • Linux 课程笔记 Nginx深入应用实践

    1 关于Nginx模块

    Nginx使用不同的模块实现不同的功能,主要有2组重要的模块:

    (1) Nginx core modules(必需的)

    包括Main、Events

    (2) Standard  HTTP modules(虽然不是必需的,但是缺省都会安装,不建议改动)

    典型的包括

    Core、Access、FastCGI、Gzip、Log、Proxy、Rewrite、Upstream

    2 Nginx目录结构

    /application/nginx

    |-- client_body_temp

    |-- conf

    |   |-- fastcgi.conf   #fastcgi配置文件

    |   |-- fastcgi.conf.default   #default文件均属于备份文件

    |   |-- fastcgi_params

    |   |-- fastcgi_params.default

    |   |-- koi-utf

    |   |-- koi-win

    |   |-- mime.types

    |   |-- mime.types.default

    |   |-- nginx.conf   #Nginx主配置文件

    |   |-- nginx.conf.default

    |   |-- nginx.conf.qinbf-20131101

    |   |-- scgi_params

    |   |-- scgi_params.default

    |   |-- uwsgi_params

    |   |-- uwsgi_params.default

    |   `-- win-utf

    |-- fastcgi_temp

    |-- html

    |   |-- 50x.html  #错误优雅显示文件

    |   `-- index.html

    |-- logs

    |   |-- access.log  #访问日志

    |   |-- error.log   #错误日志

    |   `-- nginx.pid 

    |-- proxy_temp

    |-- sbin

    |   `-- nginx

    |-- scgi_temp

    `-- uwsgi_temp

    9 directories, 22 files

    3 Nginx.conf配置文件

    worker_processes  1;  #ps -ef |grep nginx可以查看到nginx的子线程数

    events {

        worker_connections  1024;  #可以理解为最大并发数

    }

    http {

        include       mime.types;

        default_type  application/octet-stream;

        sendfile        on;

        keepalive_timeout  65;

        server {  #一个server相当于apache的一个vhost,可以复制多个server模块配置多个主机

            listen       80;

            server_name  localhost;

            location / {   #相当于htdocs

                root   html;

                index  index.html index.htm;

            }

            error_page   500 502 503 504  /50x.html;  #优雅显示页面

            location = /50x.html {

                root   html;

            }

        }

    }

    4 基于域名的虚拟主机配置

    http {

     10     include       mime.types;

     11     default_type  application/octet-stream;

     12     sendfile        on;

     13     keepalive_timeout  65;

     14

     15     server {

     16         listen       80;

     17         server_name  www.etiantian.org;

     18

     19         location / {

     20             root   html;

     21             index  index.html index.htm;

     22         }

     23

     24         error_page   500 502 503 504  /50x.html;

     25         location = /50x.html {

     26             root   html;

     27

     28         }

     29

     30     }

     31

     32 }

    然后检查语法,优雅重启

    [root@test2 conf]# /application/nginx/sbin/nginx -t

    nginx: the configuration file /application/nginx-1.2.9/conf/nginx.conf syntax is ok

    nginx: configuration file /application/nginx-1.2.9/conf/nginx.conf test is successful

    [root@test2 conf]# /application/nginx/sbin/nginx -s reload

    [root@test2 conf]# netstat -tupnl |grep 80

    tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      21475/nginx  

    配置虚拟主机流程:

    1)  复制server标签段,到结尾,注意放到http的结束大括号前

    2)  更改server_name及对应网页的根目录

    3)  创建对应网页的根目录,并建立测试文件

    4)  检查语法,重启服务

    5)  在host文件做解析

    6)  浏览器访问

    5 禁止ip访问

    为防止域名恶意解析到自己的服务器上,必须要配置禁止ip访问

    server  {

         listen  80  default;

         return 500;

    }

    #这段配置,是将访问没有配置为本服务器虚拟主机的域名,默认返回500错误

    #也可以利用rewrite规则,把恶意解析到本服务器的域名访问流量,导入到自己的站点

    server  {

           listen  80  default;

           rewrite  ^(.*)  http://www.etiantian.com  permanent;

    }

    #域名解析到本地服务器,但是并未为该域名配置本地服务器的虚拟主机,将跳转到rewrite定义的站点上

    #server_name  _;  这个的含义代表输入ip地址直接访问的结果

    #listen  80  default_server;  default_server这个参数用于nginx 0.8版本之后

    6 nginx日志配置及切割

    目前还没有比较好的Nginx日志切割工具

    日志的格式定义:

    log_format  commonlog  '$remote_addr - $remote_user [$time_local] "$request" '

                               '$status $body_bytes_sent "$http_referer" '

                               '"$http_user_agent" "$http_x_forwarded_for"';

        server {

            listen       80;

            server_name  www.etiantian.com;

            location / {

                root   /data0/www/www;

                index  index.html index.htm;

            }

            error_page   500 502 503 504  /50x.html;

            location = /50x.html {

                root   html;

            }

            access_log /app/logs/www_access.log commonlog;

            #日志格式的调用

         }

    192.168.1.1 - - [22/Nov/2013:00:27:32 +0800] "GET /favicon.ico HTTP/1.1" 404 570 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.95 Safari/537.36" "-"

    日志切割脚本

    #!/bin/bash

    date=`date +%Y%m%d`

    Nginx_Dir="/application/nginx"

    Nginx_Logs="/app/logs"

    Log_Name="www_access"

    cd /tmp

    [ -d $Nginx_Logs ] && cd $Nginx_Logs || exit 1

    [ -f $Log_Name.log ] && /bin/mv $Log_Name.log  ${Log_Name}.${date}.log || exit 1

    if [ $? -eq 0 -a -f $Nginx_Dir/logs/nginx.pid ]

       then

          kill -USR1 `cat  $Nginx_Dir/logs/nginx.pid` 

    #把nginx的日志重命名相当于删除文件,需要重启nginx服务

    fi

    然后每天晚上12点切割

    crontab  -e

    00  00  * * * /bin/sh /root/scripts/cut_nginx_log.sh >/dev/null 2>&1

    统计IP并排序

    awk '{print $1}' www_access.log  | sort | uniq -c | sort -rn -k 1 | head

    7  Nginx配置文件优化

    worker_processes  1;

    events {

        worker_connections  1024;

    }

    http {

        include       mime.types;

        default_type  application/octet-stream;

        sendfile        on;

        keepalive_timeout  65;

        log_format  commonlog  '$remote_addr - $remote_user [$time_local] "$request" '

                               '$status $body_bytes_sent "$http_referer" '

                               '"$http_user_agent" "$http_x_forwarded_for"';

       

        include extra/www.conf;

        include extra/bbs.conf;

        include extra/blog.conf;

        include extra/default.conf;

    }

    模仿apache配置文件,把虚拟主机的配置写在extra目录的配置文件内,然后用include的方式调用。

    8  Nginx别名及连接状态信息配置

    #别名其实就是以相应的别名配置虚拟主机,然后利用rewrite规则,跳转到主域名上。

    专门写一个配置文件内容如下:

    server {

            listen       80;

            server_name  etiantian.com;

           

            rewrite ^(.*) http://www.etiantian.com permanent;

     }

    然后在nginx文件将调用此文件:include  extra/www_alias.conf

    即是配置一个虚拟主机文件,内容如下:

    server {

            listen       80;

            server_name  status.etiantian.com;

            location / {

            stub_status on;

            access_log off;

            }

    }

    然后在nginx.conf文件中调用此配置文件

  • 相关阅读:
    9.对话框
    8.布局管理器
    7.对象模型
    6.添加动作
    5.Qt模块简介
    4.自定义信号槽
    3.信号槽
    2.Helloworld
    1.Qt简介
    Problem E: 成绩排序
  • 原文地址:https://www.cnblogs.com/fengze/p/6823038.html
Copyright © 2011-2022 走看看