Nginx个人学习笔记:基础配置

参考资料:

从0到1学会Nginx分布式框架(视频教程)

 写在开头:本文为学习后的总结,可能有不到位的地方,错误的地方,欢迎各位指正。

   nginx.conf配置示例如下:

#运行用户
#user somebody;

#设置工作进程数,通常设置成和cpu的数量相等
worker_processes  1;

#全局错误日志,按照级别划分成error、notice、info三个日志
error_log  D:/Tools/nginx-1.10.1/logs/error.log;
error_log  D:/Tools/nginx-1.10.1/logs/notice.log  notice;
error_log  D:/Tools/nginx-1.10.1/logs/info.log  info;

#PID文件,记录当前启动的nginx的进程ID(注意,这里是记录的master进程,只能有一个)
pid        D:/Tools/nginx-1.10.1/logs/nginx.pid;

#工作模式及连接数上限
events {
    worker_connections 1024;    #单个后台worker process进程的最大并发链接数
}

#设定http服务器,利用它的反向代理功能提供负载均衡支持
http {
    #导入其他文件中定义的配置
    include       D:/Tools/nginx-1.10.1/conf/mime.types;
    #设置响应类型
    default_type  application/octet-stream;

    #配置日志格式
	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路径
    access_log    D:/Tools/nginx-1.10.1/logs/access.log main;
    rewrite_log     on;

    #sendfile 指令指定 nginx 是否调用 sendfile 函数(零拷贝)来输出文件,对于普通应用,
    sendfile        on;
    #sendfile打开时才可启用,开启缓冲池,当缓冲池满后才进行传输
    tcp_nopush     on;


    #连接超时时间
    keepalive_timeout  120;
    #keepalive开启时才可启用,当有数据时立即发送,不进行缓冲
    tcp_nodelay     on;


	#gzip压缩开关
	#gzip  on;

    #设定反向代理实际的服务器列表
    upstream zp_server1{
        server 127.0.0.1:8089;
    }

    #HTTP服务器
    server {
        #监听80端口,80端口是知名端口号,用于HTTP协议
        listen       80;

        #定义使用www.xx.com访问
        server_name  www.helloworld.com;

		#首页
		index index.html

		#指向webapp的目录
		root D:\01_Workspace\Project\github\zp\SpringNotes\spring-security\spring-shiro\src\main\webapp;

		#编码格式
		charset utf-8;

		#nginx服务器与被代理的服务器建立连接的超时时间,默认60秒
        proxy_connect_timeout 180;
        #被代理服务器回传数据给nginx超时时间(后端服务器回传数据的时间)
        proxy_send_timeout 180;
        #nginx等候等待被代理服务器响应时间(即后端服务器处理请求的时间)
        proxy_read_timeout 180;
        #在响应头中增加以下响应属性
        proxy_set_header Host $host;
        proxy_set_header X-Forwarder-For $remote_addr;

        #反向代理的路径(和upstream绑定),location 后面设置映射的路径
        location / {
            proxy_pass http://zp_server1;
        }

        #静态文件,nginx自己处理
        location ~ ^/(images|javascript|js|css|flash|media|static)/ {
            root D:\01_Workspace\Project\github\zp\SpringNotes\spring-security\spring-shiro\src\main\webapp\views;
            #设置过期时间
            expires 30d;
        }

        #设定查看Nginx状态的地址
        location /NginxStatus {
            stub_status           on;
            access_log            on;
            auth_basic            "NginxStatus";
            auth_basic_user_file  conf/htpasswd;
        }

        #禁止访问 .htxxx 文件
        location ~ /\.ht {
            deny all;
        }

		#错误处理页面(可选择性配置)
		#error_page   404              /404.html;
		#error_page   500 502 503 504  /50x.html;
        #location = /50x.html {
        #    root   html;
        #}
    }
}

一、静态资源优化

        正常情况下,服务端获取文件资源,需要应用程序发起read()指令,操作系统由用户态进入内核态,将文件资源cpoy到内核缓冲区后,再返回给应用程序。然后再由应用程序通过write()指令将文件资源copy到内核态中socket缓冲区,最后返回给客户端浏览器。

       在上面的情况中,我们发现,获取一次文件资源需要两次由用户态进入内核态,且需需要多次copy文件资源,将其从内核缓存区复制到应用程序缓冲区,再写回内核态中的socket缓冲区。这样的过程无疑是复杂的,Linux为我们提供了sendfile函数来优化整个过程,内核缓冲区直接将文件资源发送给socket缓冲区,避免了再与用户态的2次交互过程。在nginx中可以使用sendfile on来打开该功能。  

二、日志格式

    #配置日志格式
	log_format  main  '[$remote_addr] - [$remote_user] [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
  • $time_local:本地时间
  • $remote_addr:请求客户端IP地址
  • $request_method:请求方法
  • $request_uri:请求的URL,不带有请求的参数
  • $uri:请求的URL,带有请求的参数
  • $request_time:请求处理时间,即响应时间
  • $status:返回状态
  • $body_bytes_sent:发送body大小
  • $geoip2_data_country_name:请求所属的国家
  • $geoip2_data_subdivisions_name:请求所属的省份或地区
  • $geoip2_data_city_name:请求所属的城市
  • $http_referer:请求来自于何处,例如从百度跳转过来
  • $upstream_addr:请求转发的后端服务器地址
  • $upstream_response_time:后端服务器响应的时间
  • $http_user_agent:访问客户端信息,可以获取到请求浏览器版本信息等
  • $http_x_forwarded_for:请求经过的代理信息

 

三、后端健康检查

        集群环境下有时后端服务器可能会出现问题,希望在出现问题后将问题服务器剔除服务器加载列表,此时就需要后端健康检查控件的需要,配置后端健康检查控件的支持需要在upstream中加入如下配置

upstream cluster {
    # simple round-robin
    server 192.168.0.1:80;
    server 192.168.0.2:80;
    check interval=3000 rise=2 fall=5 timeout=1000 type=tcp;
}

        如上配置即可实现针对upstream中每一个server执行健康检查操作,每个三秒钟对后端发起一次检测,检测后端的80端口,如果后端在1s内不给出响应,连续5次出现不响应的情况,则将该机器踢出可用服务器列表中,如果后期连续检测两次该服务器正确的响应了,则重新将该服务器调度至服务器可用列表中。

        如果希望采用http的检测方式,可以使用如下配置

upstream cluster {
    # simple round-robin
    server 192.168.0.1:80;
    server 192.168.0.2:80;
    check interval=3000 rise=2 fall=5 timeout=1000 type=http;
    check_http_send "GET /intelliq-web/index/home HTTP/1.0\r\n\r\n";
    check_http_expect_alive http_2xx http_3xx;
}

        其中在check_http_send中配置的GET /intelliq-web/index/home HTTP/1.0\r\n\r\n,表示在检查时向后端发送/intelliq-web/index/home请求,以此判断后端是否正常,如果后端返回2xx和3xx则表示是存活的。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值