nginx

nginx学习笔记

docker运行nginx

## ---Dockerfile
FROM nginx:latest
COPY nginx.conf /etc/nginx/nginx.conf

##run: docker build -t tomsun28/nginx:1.0 .
##run: docker run -d --restart=always -p 80:80 --name nginx -v /opt/dockerworkspace/log/nginx:/var/log/nginx tomsun28/nginx:1.0  

日常作为逆向代理转发nginx所需要的nginx.conf

user  nginx;
worker_processes  2;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

worker_rlimit_nofile 40000;

events {
    use epoll;
    worker_connections  8096;
	multi_accept on;
}

http {
    include       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  /var/log/nginx/access.log  main;

    sendfile           on;
    tcp_nopush         on;
    tcp_nodelay        on;
	keepalive_timeout  15;
	
    # gzip压缩功能设置
    gzip on;
    gzip_min_length 1k;
    gzip_buffers    4 32k;
    gzip_http_version 1.1;
    gzip_comp_level 6;
    gzip_types text/html text/plain text/css text/javascript application/json application/javascript application/x-javascript application/xml;
    gzip_vary on;
			
	upstream bootshiro {
      server    10.0.75.1:8080;
      #server    127.0.0.1:8081;
    }
  
    upstream angular {
      server    10.0.75.1:4200;
    }
    # 缓存配置
   	proxy_cache_path /tmp/cache levels=1:2 keys_zone=my_cache:30m max_size=1G;

    server {
      listen    80;
      server_name    localhost;
    
      charset    utf-8;
      #access_log    logs/host.access.log main;
    
      location / {
		
		proxy_pass    http://angular;
	    
		proxy_redirect     off;
        proxy_set_header  Host  $host:$server_port;
        
		proxy_buffering on;
	    proxy_buffer_size   4k;
        proxy_buffers   4 32k;
        proxy_busy_buffers_size   64k;
		proxy_temp_file_write_size 64k;
		
      }
    
      location /api/ {
        #后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
		proxy_pass    http://bootshiro/;
		proxy_redirect     off;
        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_buffer_size   4k;
        proxy_buffers   4 32k;
        proxy_busy_buffers_size   64k;
		proxy_temp_file_write_size 64k;
	    
      }
	  #对静态资源缓存
	  #location ~* \.(html|css|jpg|gif|ico|js)$ {
      #  proxy_cache          my_cache;
      #  proxy_cache_key      $host$uri$is_args$args;
      #  proxy_cache_valid    200 301 302 30m;
      #  expires              30m;
      #  proxy_pass  http://angular;
	  #}
	  
    
    }
}



整理网络上的nginx.conf详解

#nginx 监听原理 先监听端口 --> 再配置域名 -->匹配到就访问local  否则  没有匹配到域名就默认访问第一个监听端口的local地址

# vi nginx.conf 
user    nobody nobody;                 #运行nginx的所属组和所有者,windows下不指定 
worker_processes    2;                 #开启2个 nginx工作进程,根据硬件调整,通常等于CPU数量或者2倍于CPU。 
error_log    logs/error.log    notice; #错误日志路径 
pid    logs/nginx.pid;                 #进程标识符pid 存放路径 

worker_rlimit_nofile    204800;        #指定进程可以打开的最大描述符:数目。

#这个指令是指当一个nginx进程打开的最多文件描述符数目,
#理论值应该是最多打开文件数(ulimit -n)与nginx进程数相除,
#但是nginx分配请求并不是那么均匀,所以最好与ulimit -n 的值保持一致。
#现在在linux 2.6内核下开启文件打开数为65535,worker_rlimit_nofile就相应应该填写65535。
#这是因为nginx调度时分配请求到进程并不是那么的均衡,
#所以假如填写10240,总并发量达到3-4万时就有进程可能超过10240了,这时会返回502错误。

events { 
use    epoll;                          #使用epoll的I/O 模型
worker_connections    1024;            #每个工作进程的最大连接数量,这里一个进程能同时处理1024个请求 
keepalive_timeout    60;               #keepalive超时时间

client_header_buffer_size    4k;       #客户端请求头部的缓冲区大小。
#这个可以根据你的系统分页大小来设置,一般一个请求头的大小不会超过1k
#不过由于一般系统分页都要大于1k,所以这里设置为分页大小。
#分页大小可以用命令getconf PAGESIZE 取得,值必须设置为“系统分页大小”的整倍数

open_file_cache    max=65535    inactive=60s;
#这个将为打开文件指定缓存,默认是没有启用的
#max指定缓存数量,建议和打开文件数一致,inactive是指经过多长时间文件没被请求后删除缓存

open_file_cache_valid    80s;          #这个是指多长时间检查一次缓存的有效信息

open_file_cache_min_uses    1;         #open_file_cache指令中的inactive参数时间内文件的最少使用次数
#如果超过这个数字,文件描述符一直是在缓存中打开的
#如上例,如果有一个文件在inactive时间内一次没被使用,它将被移除。
}

#设定http服务器,利用它的反向代理功能提供负载均衡支持
http { 
  include    mime.types;                      #设定mime类型,类型由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” ; 
  #日志格式设置
    #$remote_addr与$http_x_forwarded_for用以记录客户端的ip地址;
    #$remote_user:用来记录客户端用户名称;
    #$time_local: 用来记录访问时间与时区;
	#$request: 用来记录请求的url与http协议;
	#$status: 用来记录请求状态;成功是200,
	#$body_bytes_sent :记录发送给客户端文件主体内容大小;
	#$http_referer:用来记录从那个页面链接访问过来的;
	#$http_user_agent:记录客户浏览器的相关信息;
	#通常web服务器放在反向代理的后面,这样就不能获取到客户的IP地址了
	#通过$remote_add拿到的IP地址是反向代理服务器的iP地址。
	#反向代理服务器在转发请求的http头信息中,可以增加x_forwarded_for信息
	#用以记录原有客户端的IP地址和原来客户端的请求的服务器地址。

    access_log    logs/access.log    main;      #默认访问日志路径 
	client_max_body_size    300m;               #设定通过nginx上传文件的大小
  
    sendfile    on;                             #sendfile指令指定nginx是否调用sendfile函数(zero copy 方式)来输出文件
    #对于普通应用,必须设为on。如果用来进行下载等应用磁盘IO重负载应用,可设置为off
	#以平衡磁盘与网络IO处理速度,降低系统uptime。
	
	proxy_connect_timeout    90;                #后端服务器连接的超时时间_发起握手等候响应超时时间
  proxy_read_timeout    180;                  #连接成功后_等候后端服务器响应时间_其实已经进入后端的排队之中等候处理(也可以说是后端服务器处理请求的时间)
    proxy_send_timeout    180;                  #后端服务器数据回传时间_就是在规定时间之内后端服务器必须传完所有的数据
	
	keepalive_timeout    65;                    #keepalive超时时间 
	
	#负载均衡
	upstream usthe {

         server 127.0.0.1:8027;

         server 127.0.0.1:8028;

         server 127.0.0.1:8029;

         hash $request_uri;

    }
	
	#nginx的upstream目前支持5种方式的分配
	#1.轮询(默认)
	#每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
	
	#2.权重weight
	#指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
	#upstream bakend {
    #     server 127.0.0.1:8027 weight=10;
    #     server 127.0.0.1:8028 weight=15;
    #}
	
	#3.ip_hash
	#每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
	#upstream bakend {
	#     ip_hash
    #     server 127.0.0.1:8027;
    #     server 127.0.0.1:8027;
    #}
	
	#4.fair(第三方)
	#按后端服务器的响应时间来分配请求,响应时间短的优先分配。
	#upstream bakend {
    #     server 127.0.0.1:8027;
    #     server 127.0.0.1:8027;
	#     fair;
    #}
	
	#5.url_hash(第三方)
	#按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效
	#upstream bakend {
    #     server 127.0.0.1:8027;
    #     server 127.0.0.1:8027;
	#     hash $request_uri;
	#     hash_method crc32;
    #}
	#在upstream中加入hash语句
	#server语句中不能写入weight等其他的参数
	#hash_method是使用的hash算法
	
	
	#使用多种策略,定义负载均衡设备的Ip及设备状态
	#upstream bakend{
    #     ip_hash;
    #     server 127.0.0.1:9090 down;
    #     server 127.0.0.1:8080 weight=2;
    #     server 127.0.0.1:6060;
    #     server 127.0.0.1:7070 backup;
    #}
	
	#每个设备的状态设置为:
    #1.down表示单前的server暂时不参与负载
    #2.weight为weight越大,负载的权重就越大。
    #3.max_fails:允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream模块定义的错误
    #4.fail_timeout:max_fails次失败后,暂停的时间。
    #5.backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。
    #nginx支持同时设置多组的负载均衡,用来给不用的server来使用。
    #client_body_in_file_only设置为On 可以将client post过来的数据记录到文件中用来做debug
	#client_body_temp_path设置记录文件的目录 可以设置最多3层目录
    #location对URL进行匹配.可以进行重定向或者进行新的代理 负载均衡
	
	
	#在需要使用负载均衡的server中增加proxy_pass http://usthe/;
		
  #配置虚拟机server 
  server { 
    listen    80;                           #监听端口
    #在本机所有ip上监听80,也可以写为192.168.1.202:80,这样的话,就只监听192.168.1.202上的80口
 
    server_name    www.hoppig.com;          #配置访问域名 

    #可以有多个 location 
    location / { 
      root      html; #站点根目录,这里html为相对路径,相对于nginx的安装目录
            index     index.html index.htm; #index指定首页index文件的名称,可以配置多个,参数以空格分开,按配置顺序查找
    } 
    
	    #当访问http://www.hoppig.com:80/docs/,就会匹配到/home/docs/index.html
        location /docs {
            root   /home;#这里为绝对路径
            index  index.html;
        }
		
		#所有URI中已.gif, .jpg, .png结尾的请求都会被映射到/data/images本地磁盘目录
		location ~ \.(gif|jpg|png)$ {
        root /data/images;
        }
		
		#nginx代理跳转,当请求为www.hoppig.com:80/api/index.html 会被转发到localhost:8080/index.html
		location /api/{
            proxy_pass http://localhost:8080/;
        }
		
		#跳转到上面设置的负载均衡upstream  usthe 
		location /usthe/ {
		    proxy_pass http://usthe;
		}
		
  } 
}



打赏

取消

感谢您的支持!

扫码支持
扫码支持