您正在查看: nginx 分类下的文章

nginx如何限速?

1.由两个指令共同完成limit_rate和limit_rate_after
2.limit_rate
是指定向客户端传输数据的速度,单位是每秒传输的字节数
该限制只针对一个连接的设定,如果同时两个连接数,那么速度是设置值的两倍
3.limit_rate_after
当一个客户端连接后,将以最快的速度下载多大文件,然后在以限制速度下载文件
该指令是下载字节量的大小值,而不是时间值
4.作用范围:http,server,location,if inlocation

 location / {
                limit_rate_after 128k;
                limit_rate 64k;
        }

如何让nginx日志记录post请求记录

调试页面时,需要记录post请求信息,以便调试问题所在,此时我们只需要在nginx配置文件log_format中增加$request_body变量,就可以让nginx日志记录下post信息

log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for" $request_body';

"POST / HTTP/1.1" 405 575 "http://127.0.0.1/form.html" "Mozilla/5.0 (X11; linux x86_64) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/31.0.1650.63 Safari/537.36" "-" fname=liliu&lname=ming

configure: error: *** The system-supplied PCRE does not support Unicode properties or UTF-8.

configure: error: *** The system-supplied PCRE does not support Unicode properties or UTF-8.

这是因为执行./configure配置时没有加上对utf-8的支持
如果要加上对utf-8的支持可以在./configure时加上参数:

./configure --enable-utf8  

执行make install操作:

pcre-8.32]# make install

make install结束后pcre编译安装流程就结束了。

Nginx 日志文件切割

nginx 是一个非常轻量的 Web 服务器,体积小、性能高、速度快等诸多优点。但不足的是也存在缺点,比如其产生的访问日志文件一直就是一个,不会自动地进行切割,如果访问量很大的话,将 导致日志文件容量非常大,不便于管理。当然了,我们也不希望看到这么庞大的一个访问日志文件,那需要手动对这个文件进行切割。

linux 平台上 shell 脚本丰富,使用 shell 脚本加 crontab 命令能非常方便地进行切割,但在 Windows 平台上就麻烦一些了,刚才弄了好长时间,就在这里记录整理一下。

日志文件切割要求

由于 nginx 的日志都是写在一个文件当中的,因此,我们需要每天零点将前一天的日志存为另外一个文件,这里我们就将 Nginx 位于 logs 目录中的 access.log 存为 access_[yyyy-MM-dd].log 的文件。其实 logs 目录中还有个 error.log 的错误日志文件,这个文件也需要每天切割一个,在这里就说 access.log 了,error.log 的切割方法类似。

linux 平台切割

在 Linux 平台上进行切割,需要使用 date 命令以获得昨天的日期、使用 kill 命令向 Nginx 进程发送重新打开日志文件的信号,以及 crontab 设置执行任务周期。

先创建一个 Shell 脚本,如下:

Shell代码
#!/bin/bash

零点执行该脚本

Nginx 日志文件所在的目录

LOGS_PATH=/usr/local/nginx/logs

获取昨天的 yyyy-MM-dd

YESTERDAY=$(date -d ”yesterday” +%Y-%m-%d)

移动文件

mv ${LOGS_PATH}/access.log ${LOGS_PATH}/access_${YESTERDAY}.log

向 Nginx 主进程发送 USR1 信号。USR1 信号是重新打开日志文件

kill -USR1 $(cat /usr/local/nginx/nginx.pid)
#!/bin/bash

零点执行该脚本

Nginx 日志文件所在的目录

LOGS_PATH=/usr/local/nginx/logs

获取昨天的 yyyy-MM-dd

YESTERDAY=$(date -d "yesterday" +%Y-%m-%d)

移动文件

mv ${LOGS_PATH}/access.log ${LOGS_PATH}/access_${YESTERDAY}.log

向 Nginx 主进程发送 USR1 信号。USR1 信号是重新打开日志文件

kill -USR1 $(cat /usr/local/nginx/nginx.pid)
上面这个脚本中的最后一行必须向 Nginx 的进程发送 USR1 信号以重新打开日志文件,如果不写的话,Nginx 会继续将日志信息写入 access_[yyyy-MM-dd].log 的那个文件中,这显然是不正确的。

脚本完成后将其存入 Nginx 安装目录的 sbin 中,取名为 cut-log.sh,之后使用 crontab -e 新增一个定时任务,在其中增加执行这个脚本:

Shell代码
0 0 * * * /bin/bash /usr/local/nginx/sbin/cut-log.sh
0 0 * * * /bin/bash /usr/local/nginx/sbin/cut-log.sh
到这里 Linux 下切割 Nginx 日志就完成了,可以将 crontab 设置为距当前时较近的时间测试一下,否则在零点出问题就不好了

【CentOS】 Nginx+jdk+tomcat 环境搭建

centos nginx+jdk+Tomcat 环境搭建
一、jdk安装

jdk下载地址:http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-javase6-419409.html

从上面网页中选择适合的jdk下载到/root/目录下。我选择的是jdk-6u20-linux-i586.bin。

下载完后,修改jdk-6u23-linux-i586.bin的文件属性为可执行,然后执行该程序安装JDK:

chmod +x jdk-6u20-linux-i586.bin
./ jdk-6u20-linux-i586.bin

按空格键看完协议,当出现提示“Do you agree to the above license terms?[yes or no] ” 时,输入“yes”。安装完成后,执行以下语句:

mv jdk1.6.0_23 /usr/local/jdk

编辑profile文件 设置开机文件Java开机执行环境文件:

vi /etc/profile

在文件的末尾增加如下内容:

JAVA_HOME="/usr/local/jdk"
CLASS_PATH="$JAVA_HOME/lib:$JAVA_HOME/jre/lib"
PATH="$JAVA_HOME/bin:.:$PATH"
CATALINA_HOME="/usr/local/Tomcat"
export JAVA_HOME CATALINA_HOME

保存并退出vi,执行以下命令使配置生效:

source /etc/profile

二、tomcat安装

apache-tomcat-6.0.35 放到/root/目录中,拷贝到/user/local/目录下,并重命名为tomcat:

mv apache-tomcat-6.0.23 /usr/local/tomcat

建立网页根目录:

mkdir /www
cp -rf /usr/local/tomcat/webapps/* /www/

配置tomcat的server.xml文件:

vim /usr/local/tomcat/conf/server.xml

查找appBase=”webapps”,修改为appBase=”/www”,其中/www 即为网页的根目录。

修改完成后,启动tomcat,默认监听端口为8080:

/usr/local/tomcat/bin/startup.sh

停止tomcat可以使用以下命令:

/usr/local/tomcat/bin/shutdown.sh

注:在执行./startup.sh,或者./shutdown.sh的时候,爆出了Permission denied,

其实很简单,就是在执行tomcat的时候,用户没有权限,而导致无法执行,

用命令chmod 修改一下bin目录下的.sh权限就可以了:

chmod u+x *.sh

再次执行 /usr/local/tomcat/bin/startup.sh (或/usr/local/tomcat/bin/shutdown.sh)就可以了。
三、nginx与tomcat整合

Nginx与tomcat的整合其实就是只要配置好nginx.conf文件就可以了。

查看并修改nginx.conf文件:

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

修改后的nginx.conf文件,红色部分为添加的关于tomcat的代码:
复制代码

user  www www;

worker_processes 1;

error_log  /home/wwwlogs/nginx_error.log  crit;

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

#Specifies the value for maximum file descriptors that can be opened by this process.
worker_rlimit_nofile 51200;

events
    {
        use epoll;
        worker_connections 51200;
    }

http
    {
        include       mime.types;
        default_type  application/octet-stream;

        server_names_hash_bucket_size 128;
        client_header_buffer_size 32k;
        large_client_header_buffers 4 32k;
        client_max_body_size 50m;

        sendfile on;
        tcp_nopush     on;

        keepalive_timeout 60;

        tcp_nodelay on;
        
        client_body_buffer_size 512k; 
        proxy_connect_timeout 5; 
        proxy_read_timeout 60; 
        proxy_send_timeout 5; 
        proxy_buffer_size 16k; 
        proxy_buffers 4 64k; 
        proxy_busy_buffers_size 128k; 
        proxy_temp_file_write_size 128k; 
        

        fastcgi_connect_timeout 300;
        fastcgi_send_timeout 300;
        fastcgi_read_timeout 300;
        fastcgi_buffer_size 64k;
        fastcgi_buffers 4 64k;
        fastcgi_busy_buffers_size 128k;
        fastcgi_temp_file_write_size 256k;

        gzip on;
        gzip_min_length  1k;
        gzip_buffers     4 16k;
        gzip_http_version 1.0;
        gzip_comp_level 2;
        gzip_types       text/plain application/x-javascript text/css application/xml;
        gzip_vary on;

        upstream tomcat_server { 
            server 127.0.0.1:8080; 
        } 


        #limit_zone  crawler  $binary_remote_addr  10m;

server
    {
        listen       80;
        server_name www.test.com;
        index index.html index.htm index.jsp index.do default.jsp default.do index.php;
        root  /home/wwwroot;

        if (-d $request_filename) 
        { 
            rewrite ^/(.*)([^/])$http://$host/$1$2/ permanent; 
        } 
        location ~ \.(jsp|jspx|do|wsdl)?$ { 
            proxy_set_header Host $host; 
            proxy_set_header X-Forwarded-For $remote_addr; 
            proxy_pass http://tomcat_server; 
        } 


        location ~ .*\.(php|php5)?$
            {
                fastcgi_pass  unix:/tmp/php-cgi.sock;
                fastcgi_index index.php;
                include fcgi.conf;
            }

        location /status {
            stub_status on;
            access_log   off;
        }

        location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
            {
                expires      30d;
            }

        location ~ .*\.(js|css)?$
            {
                expires      12h;
            }

        log_format  access  '$remote_addr - $remote_user [$time_local] "$request" '
             '$status $body_bytes_sent "$http_referer" '
             '"$http_user_agent" $http_x_forwarded_for';
        access_log  /home/wwwlogs/access.log  access;
    }
include vhost/*.conf;
}

复制代码

在配置文件中,静态HTML网页、图片、js、css、Flash等使用Nginx来处理,以便得到更快的速度,文件扩展名为.JSP、.do、wsdl的请求,由Nginx反向代理Tomcat HTTP服务器来处理。

修改/usr/local/nginx/conf/nginx.conf配置文件后,请执行以下命令检查配置文件是否正确:

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

如果屏幕显示以下两行信息,说明配置文件正确:

the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
the configuration file /usr/local/nginx/conf/nginx.conf was tested successfully

重新启动nginx:

/usr/local/nginx/sbin/nginx -s reload

nginx启动后,可以访问以下URL中的jsp实例程序,检查jsp程序能否运行。
http://localhost/examples/jsp/
注意:nginx与tomcat的工作原理是由nginx代理tomcat输出网页,因此如果开启了防火墙,防火墙不用打开8080端口,也一样可以访问jsp页面。