nginx中级应用

1、安装监控模块

  Nginx中的stub_status模块主要用于查看Nginx的一些状态信息.

  本模块默认是不会编译进Nginx的,如果你要使用该模块,则要在编译安装Nginx时指定:

.  /configure –with-http_stub_status_module

  配置文件中启动监控

  server下:

  location /nginx-status {

allow --------

allow --------//允许的ip

deny all;//

stub_status on;

access_log  off;

}

2、启用websocket代理

  由于websocket只有在连接是使用了http协议,之后边返回101改变协议为websocket,所以需要特殊对websocket做配置

  http://nginx.org/en/docs/http/websocket.html

  

location /chat/ {
    proxy_pass http://backend;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
}

A more sophisticated(复杂) example in which a value of the “Connection” header field in a request to the proxied server depends on the presence of the “Upgrade” field in the client request header:

http {
    map $http_upgrade $connection_upgrade {
        default upgrade;
        ‘‘      close;
    }

    server {
        ...

        location /chat/ {
            proxy_pass http://backend;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection $connection_upgrade;
        }
    }

By default, the connection will be closed if the proxied server does not transmit any data within 60 seconds. This timeout can be increased with the proxy_read_timeout directive. Alternatively, the proxied server can be configured to periodically send WebSocket ping frames to reset the timeout and check if the connection is still alive.

  

我的配置文件:详解

##定义Nginx运行的用户和用户组,user user [group],没有group是默认和user相同
user  nginx www;

#全局错误日志定义类型,[ debug | info | notice | warn | error | crit ]
#最后一个参数为级别
error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#进程文件,进程pid放到这个文件中,用于作为参数使用
pid        logs/nginx.pid;

#nginx进程数,建议设置为等于CPU总核心数。
#设置为“auto”将尝试自动检测它
worker_processes  2;

#一个nginx进程打开的最多文件描述符数目,理论值应该是最多打开文件数(系统的值ulimit -n)与nginx进程数相除,但是nginx分配请求并不均匀,所以建议与ulimit -n的值保持一致。
#如果不确定,这个不要配,nginx会自动使用合适的值,也可以叫做文件描述符数量
#worker_rlimit_nofile 65535;

#event指令,工作模式与连接数上限
events {
        #参考事件模型,use [ kqueue | rtsig | epoll | /dev/poll | select | poll ]; epoll模型是Linux 2.6以上版本内核中的高性能网络I/O模型,如果跑在FreeBSD上面,就用kqueue模型。
    use epoll;
    #告诉nginx收到一个新连接通知后接受尽可能多的连接。
    multi_accept on;
    #单个进程最大连接数(最大连接数=连接数*进程数)
    worker_connections  2048;
}

http {

        #设置nginx是否将存储访问日志。关闭这个选项可以让读取磁盘IO操作更快(aka,YOLO)。
        #log_format  main  ‘$remote_addr - $remote_user [$time_local] "$request" ‘
    #                  ‘$status $body_bytes_sent "$http_referer" ‘
    #                  ‘"$http_user_agent" "$http_x_forwarded_for"‘;
    #access_log  logs/access.log  main;

        #文件扩展名与文件类型映射表
    include       mime.types;

    #默认文件类型
    default_type  application/octet-stream;

        #默认编码
        #charset utf-8; 

        #服务器名字的hash表大小,用于使用负载均衡时防止串session
        server_names_hash_bucket_size 128; 

        #server_tokens 并不会让nginx执行的速度更快,但它可以关闭在错误页面中的nginx版本数字,这样对于安全性是有好处的。
        server_tokens off;

        #可以让sendfile()发挥作用。sendfile()可以在磁盘和TCP socket之间互相拷贝数据(或任意两个文件描述符)。
        #Pre-sendfile是传送数据之前在用户空间申请数据缓冲区。之后用read()将数据从文件拷贝到这个缓冲区,
        #write()将缓冲区数据写入网络。sendfile()是立即将数据从磁盘读到OS缓存。
        #因为这种拷贝是在内核完成的,sendfile()要比组合read()和write()以及打开关闭丢弃缓冲更加有效
        ##开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,对于普通应用设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。注意:如果图片显示不正常把这个改成off。
    sendfile        on;  

    #告诉nginx在一个数据包里发送所有头文件,而不一个接一个的发送
    #tcp_nopush     on;
    #告诉nginx不要缓存数据,而是一段一段的发送–当需要及时发送数据时,就应该给应用设置这个属性,这样发送一小块数据信息时就不能立即得到返回值。
    #tcp_nodelay        on;

        #给客户端分配keep-alive链接超时时间。服务器将在这个超时时间过后关闭链接。我们将它设置低些可以让ngnix持续工作的时间更长。秒。
    keepalive_timeout  65;

    #设置请求头和请求体(各自)的超时时间。我们也可以把这个设置低些。
    client_header_timeout 10;
    client_body_timeout 10;

    #开启目录列表访问,合适下载服务器,默认关闭。
    autoindex on; 

    #告诉nginx关闭不响应的客户端连接。这将会释放那个客户端所占有的内存空间。
    reset_timedout_connection on;

        #send_timeout 指定客户端的响应超时时间。这个设置不会用于整个转发器,而是在两次客户端读取操作之间。如果在这段时间内,客户端没有读取任何数据,nginx就会关闭连接。
        send_timeout 10;

        #limit_conn_zone设置用于保存各种key(比如当前连接数)的共享内存的参数。5m就是5兆字节,这个值应该被设置的足够大以存储(32K*5)32byte状态或者(16K*5)64byte状态。
        limit_conn_zone $binary_remote_addr zone=addr:5m;

        #limit_conn为给定的key设置最大连接数。这里key是addr,我们设置的值是100,也就是说我们允许每一个IP地址最多同时打开有100个连接。
        limit_conn_zone $binary_remote_addr zone=addr:5m;

      # gzip压缩功能设置
    gzip on;
    #为指定的客户端禁用gzip功能。我们设置成IE6或者更低版本以使我们的方案能够广泛兼容。
    gzip_disable "msie6";
    #告诉nginx在压缩资源之前,先查找是否有预先gzip处理过的资源。这要求你预先压缩你的文件(在这个例子中被注释掉了),从而允许你使用最高压缩比,这样nginx就不用再压缩这些文件了(想要更详尽的gzip_static的信息,请点击这里)。
    #gzip_static on;
    #允许或者禁止压缩基于请求和响应的响应流。我们设置为any,意味着将会压缩所有的请求。
    #gzip_proxied
    #设置对数据启用压缩的最少字节数。如果一个请求小于1000字节,我们最好不要压缩它,因为压缩这些小的数据会降低处理此请求的所有进程的速度。
    gzip_min_length 1k;
    #压缩缓冲区
    gzip_buffers    4 16k;
    ##压缩版本(默认1.1,前端如果是squid2.5请使用1.0)
    gzip_http_version 1.0;
    #设置数据的压缩等级。这个等级可以是1-9之间的任意数值,9是最慢但是压缩比最大的。我们设置为4,这是一个比较折中的设置。
    gzip_comp_level 6;
    #设置需要压缩的数据格式。上面例子中已经有一些了,你也可以再添加更多的格式。mime用空格隔开。
    gzip_types text/html text/plain text/css text/javascript application/json application/javascript application/x-javascript application/xml;
    gzip_vary on;

    #上传文件大小限制
    #client_header_buffer_size 32k;

    #设定请求缓存
    large_client_header_buffers 4 64k; 

  # http_proxy 设置
    client_max_body_size   10m;
    client_body_buffer_size   128k;
    proxy_connect_timeout   75;
    proxy_send_timeout   75;
    proxy_read_timeout   75;
    proxy_buffer_size   4k;
    proxy_buffers   4 32k;
    proxy_busy_buffers_size   64k;
    proxy_temp_file_write_size  64k;
    proxy_temp_path   /usr/local/nginx/proxy_temp 1 2;

      # 设定负载均衡后台服务器列表
      #upstream的负载均衡,weight是权重,可以根据机器配置定义权重。weigth参数表示权值,权值越高被分配到的几率越大。
      #backend为服务器name
    upstream  backend  {
              #ip_hash;
              server   192.168.10.100:8080 max_fails=2 fail_timeout=30s ;
              server   192.168.10.101:8080 max_fails=2 fail_timeout=30s ;
              #server 192.168.80.121:80 weight=3;
                            #server 192.168.80.122:80 weight=2;
                            #server 192.168.80.123:80 weight=3;
    }

        # FastCGI相关参数是为了改善网站的性能:减少资源占用,提高访问速度。下面参数看字面意思都能理解。
        #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 128k;

        # cache informations about file descriptors, frequently accessed files
        # can boost performance, but you need to test those values
        #打开缓存的同时也指定了缓存最大数目,以及缓存的时间。我们可以设置一个相对高的最大时间,这样我们可以在它们不活动超过20秒后清除掉。
        open_file_cache max=100000 inactive=20s;
        #在open_file_cache中指定检测正确信息的间隔时间。
        open_file_cache_valid 30s;
        #定义了open_file_cache中指令参数不活动时间期间里最小的文件数。
        open_file_cache_min_uses 2;
        #指定了当搜索一个文件时是否缓存错误信息,也包括再次给配置中添加文件。我们也包括了服务器模块,这些是在不同文件中定义的。如果你的服务器模块不在这些位置,你就得修改这一行来指定正确的位置。
        open_file_cache_errors on;
        ##
        # Virtual Host Configs
        # aka our settings for specific servers
        ##
        include /etc/nginx/conf.d/*.conf;
        include /etc/nginx/sites-enabled/*;

      # 很重要的虚拟主机配置
    server {
        listen       80;
        #域名可以有多个,用空格隔开
        server_name  localhost itoatest.example.com;
        #不确定在这里配有没有用
        #index index.html index.htm index.php;
        #根目录,不确定这里是否有效,一般在location下,这里有可能是全局配置
        #在这个目录下根据请求地址找文件.
        #root   /home/html/angular;

                #日志格式设定
                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  logs/host.access.log  main;

        charset utf-8;

        #对 / 所有做负载均衡+反向代理
        location / {
            root   /apps/oaapp;
            index  index.jsp index.html index.htm;

            proxy_pass        http://backend;
            proxy_redirect off;
            # 后端的Web服务器可以通过X-Forwarded-For获取用户真实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;
            proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;

        }

        #静态文件,nginx自己处理,不去backend请求tomcat,正则表达式以~开头
        location  ~* /download/ {
            root /apps/oa/fs;
        }

        #php文件,交给CGI来处理
        location ~ .*\.(php|php5)?$
                {
                        fastcgi_pass 127.0.0.1:9000;
                        fastcgi_index index.php;
                        include fastcgi.conf;
                }

        #本地动静分离反向代理配置
                #所有jsp的页面均交由tomcat或resin处理
                location ~ .(jsp|jspx|do)?$ {
                        proxy_set_header Host $host;
                        proxy_set_header X-Real-IP $remote_addr;
                        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                        proxy_pass http://127.0.0.1:8080;
                }

                location ~ .*.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$ {
                        expires 15d;
                }

        #图片缓存时间设置
        location ~ .*\.(gif|jpg|jpeg|bmp|png|ico|txt|js|css)$
        {
            root /apps/oaapp;
            #缓存时长
            expires      7d;
        }

        #JS和CSS缓存时间设置
                location ~ .*\.(js|css)?$
                {
                        expires 1h;
                }

        location /nginx_status {
            stub_status on;
            access_log off;
            //允许哪个ip查看
            allow 192.168.10.0/24;
            deny all;
        }

        #设定查看Nginx状态的地址
                #location /NginxStatus {
                #        stub_status on;
                #        access_log on;
                #        auth_basic "NginxStatus";
                #        auth_basic_user_file conf/htpasswd;
                #        #htpasswd文件的内容可以用apache提供的htpasswd工具来产生。
                #}

                #禁止直接访问WEB-INF文件夹
        location ~ ^/(WEB-INF)/ {
            deny all;
        }
        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        #配置二级域名,$host代表访问的地址,用正则表达式匹配,再使用rewrite模块把地址重写
        if ( $host ~* (\b(?!www\b)\w+)\.\w+\.\w+ ) {
            set $subdomain $1;
        }
        location / {
            rewrite ^/$ /blog/$subdomain last;
            proxy_pass http://www.mydomain.com/;
        }

    }

  ## 其它虚拟主机,server 指令开始
      server {
                listen 80;
                server_name node.ailiailia.com;

                location / {
                        proxy_pass http://localhost:3000/;
                        proxy_set_header Host $host;
                        proxy_redirect off;
                        proxy_set_header X-Real-IP $remote_addr;
                        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                        proxy_connect_timeout 60;
                        proxy_read_timeout 600;
                        proxy_send_timeout 600;
                }

                location /status {
                        stub_status on;
                        access_log off;
                }

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

                location /.(js|css)?$ {
                        expires 12h;
                }
        }
}
时间: 2024-10-25 05:54:22

nginx中级应用的相关文章

【中级篇】部署Tomcat+Nginx负载均衡集群

部署Tomcat+Nginx负载均衡集群 1.          实验需求: 1)     2台服务器同时部署tomcat; 2) 部署Nginx 3) 搭建负载均衡,测试其效果. 2.          实验环境: Linux服务器系统版本:CentOS-6.5 -S02 IP:192.168.10.15  ( tomcat 2 ) Linux服务器系统版本:CentOS-6.5 -S03 IP : 192.168.10.18  ( Nginx) Linux服务器系统版本:  RedHat6.

【转载】Session分布式共享 = Session + Redis + Nginx

转载blogs文章,以作收藏学习 原文作者:傲翼飞寒 原文地址:http://www.cnblogs.com/newP/p/6518918.html 一.Session 1.Session 介绍 我相信,搞Web开发的对Session一定再熟悉不过了,所以我就简单的介绍一下. Session:在计算机中,尤其是在网络应用中,称为“会话控制”. 每个用户(浏览器)首次与web服务器建立连接时,就会产生一个Session,同时服务器会分配一个SessionId给用户的浏览器.我们可以用Fiddler

继续坑坑坑(关于购买的证书 若不添加中级证书 安卓出现无法发起请求)

前言:  作为一个运维人员不背锅,谁背呢! 正文: 虽然也是使用小程序发现的,但是之前在app开发组也发现了这个问题,因为我们购买的是GlobalSign的证书,有一个中级证书的概论,之前直接把签名的证书 和私钥 放nginx  和阿里云的cdn  一直觉得没问题也就没管,但是安卓手机就不一样了~ 现象为手机无法请求数据(数据包都没有发起请求),使用浏览器直接访问接口 现象为 弹出证书不信任..这个问题是因为购买的证书 一定要在crt 后边追加中级证书 (值得注意的是 中级证书放下边 自己的放上

Linux内核project导论——linux学习和职业曲线(刚開始学习的人,中级,高级都可參考)

Linux世界介绍 给自己定级 门外汉: 不会安装操作系统 不会用虚拟机(安装和使用) 入门级: 熟悉常见的发行版,甚至装过而且能用一些特殊发行版(比如kali)做过一些简单的图形界面的使用. 会一些最基础的命令(比如cd.ps.top.ls.ifconfig等这个级别的) 基础级: 能够使用一些常见的命令(touch.tail.date.find.du.fdisk.less.pidof等这个级别的命令) 图形界面操作的比較熟练.而且能够相应一部分的后台命令. 知道一些经常使用的配置文件的作用(

Linux中级网络服务与架构基础理论

在前面我讲解了Linux基础命令与基础网络服务.我们学会这些还不足以应对运维工作中的内容,如果你坚持下来学习,学习下面的中级内容我相信你能够很轻松的找到一份Linux的工作.至于待遇嘛!这个要看你学的有多深啦! 中级课程我是根据自己的工作经验来写的,其目的是想让童鞋们能够通过学习,找到工作.看下我们的课程目录吧! 1.Java语言Tomcat技术 2.Linux系统安全与优化 3.Apache的Web安全与优化 4.Nginx的Web安全与优化 5.Php的安全与优化 6.数据库的基本原理 7.

在NGINX上配置HTTPS---血的教训--要重启NGINX

重启,不是重载!!! 是STOP & START 而不是RELOAD!!! 纠结了好几天...(难道有的NGINX上不用重启????) 你妹的,上次也是,,PHP-FPM,将一个PHP的程序连MYSQL数据库从IP更改为域名,也要重启PHP-FPM才生效!!!! 跟WIN一样??重启也能解决UX80%的问题???? ~~~~~~~~~~~~~~~~~~ Nginx SSL 数字证书安装 第一步:获取服务器证书 1.  获取域名型(DV)中级证书访问:/support/root-dvssl.htm

Nginx、Tomcat、SSL、双向认证

1. 证书层级结构 2. 服务器结构 tomcat不要求认证客户端,nginx要求认证客户端 3. tomcat配置注意点 tomcat的服务器证书的CN必须为tomcat_backend 4. nginx配置注意点 使用openssl从pfx文件中导出pem格式公钥 1 openssl pkcs12 -clcerts -nokeys -in cert.p12 -out cert.pem 使用openssl从pfx文件中导出pem格式私钥 1 openssl pkcs12 -nocerts -n

PHP中级和高级程序员应该掌握哪些技术?

中级PHP开发工程师 1.Linux 能够流畅的使用Shell脚本来完成很多自动化的工作:awk/sed/perl 也操作的不错,能够完成很多文本处理和数据统计等工作:基本能够安装大 部分非特殊的Linux程序(包括各种库.包.第三方依赖等等,比如MongoDB/Redis/Sphinx/Luncene/SVN之类的):了解基 本的Linux服务,知道如何查看Linux的性能指标数据,知道基本的Linux下面的问题跟踪等 2. Nginx 在第一阶段的基础上面,了解复杂一些的Nginx配置:包括

新书《Nginx实战:基于Lua语言的配置、开发与架构详解》开始发售

新书<Nginx实战:基于Lua语言的配置.开发与架构详解>开始发售https://item.jd.com/12487157.html#none <Nginx实战:基于Lua语言的配置.开发与架构详解>主要讲解了Nginx在反向代理和应用开发中的作用,阅读本书可以了解Nginx在互联网开发中扮演的多个角色,充分利用这些角色的各项功能有助于提升服务的整体性能.<Nginx实战:基于Lua语言的配置.开发与架构详解>所介绍的大部分功能是通过Nginx+Lua进行开发和配置的