nginx常用配置

常用配置项

worker_processes  2;
events {
    worker_connections  2048;
}
http {
    server_tokens off;
    include       mime.types;
    default_type  application/octet-stream;

    server_names_hash_bucket_size 128;
    client_header_buffer_size 4k;
    large_client_header_buffers 4 128k;
    #size limits
    client_max_body_size             8m;
    client_body_buffer_size        256k;
    client_header_timeout     3m;
    client_body_timeout 3m;
    send_timeout             3m;
    sendfile on;
    tcp_nopush         on;
    keepalive_timeout 600;
    tcp_nodelay on;
    #sendfile        on;
    #tcp_nopush     on;
    
    #keepalive_timeout  0;
   # keepalive_timeout  600;


    //压缩相关
    gzip on;
	gzip_min_length 1k;
	gzip_buffers 4 16k;
	#gzip_http_version 1.0;
	gzip_comp_level 3;
	gzip_types text/plain application/x-javascript text/css application/xml text/javascript application/javascript;
	gzip_vary off;
	gzip_disable "MSIE [1-6]\.";

    // 后端可以获取真实IP
    proxy_set_header Host $host;
	proxy_set_header X-Real-IP $remote_addr;
	proxy_set_header REMOTE-HOST $remote_addr;
	proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
	#client_max_body_size 30m;


    upstream  name {  //多台机器负载均衡
        //ip_hash; 选用Iphash方式
		server   localhost:8913 weight=1;//weight越大,权重越大
	}
    server {
        listen       80;
        server_name  123.56.129.97;
        charset utf-8;
        access_log  logs/access.log;

        location / {
	        #过期时间为1天:1d 一小时:1h  一分钟:1m -1:永远过期
	        location ~* \.(js|css|html) {expires -1;}
	        root   html; //静态页目录
	        index  index.html index.htm; //首页默认格式
        }
        location /sub-1/ {
    	    proxy_pass http://localhost:8912;
        }
        location /sub-2/ {
	        proxy_pass http://name;
        }
    }
}

 location

  1. 语法:location [= | ~ | ~* | ^~] </uri/> {...}  
  2. 缺省:N/A
  3. 作用域:server

匹配规则:

1. 四种匹配方式
   = 精确匹配   
   ~ 大小写敏感正则匹配
   ~* 大小写不敏感正则匹配    
   ^~ 前缀匹配
2. location匹配指令的执行顺序  
   首先:= 精确匹配;   
   其次:^~ 前缀匹配;      
   再次:~* 和 ~ 正则匹配,顺序依据出现顺序;
   最后:如果出现正则匹配成功,则采用该正则匹配;如果无可匹配正则,
   则采用前缀匹配结果。
举例:

location  = / { # 只匹配"/".}
location  / {# 匹配任何请求,因为所有请求都是以"/"开始
         # 但是更长字符匹配或者正则表达式匹配会优先匹配
 }
location ^~ /images/ {
        # 匹配任何以 /images/ 开始的请求,并停止匹配
          其它location

}
location ~* \.(gif|jpg|jpeg)$ {
          # 匹配以 gif, jpg, or jpeg结尾的请求. 
          # 但是所有 /images/ 目录的请求将由上面localtion处理.  
}

多工程配置文件

nginx.conf中添加http模块下添加include属性:

http:{

    include /etc/nginx/conf.d/*.conf;
    server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  _;
        root         /usr/share/nginx/html;
        return       403;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location / {
        }
    }
}

然后多个工程的不同配置文件可放在/conf.d/文件夹下:

upstream servers {
    server 127.0.0.1:8095;
}

server {
    listen 443 ssl;
    listen [::]:443 ssl;
    server_name 域名;
    ssl_certificate   ssl/a.fullchain;
    ssl_certificate_key  ssl/a.key;
    ssl_session_timeout 5m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;

    client_max_body_size 20M;

    location / {
            send_timeout 120;
            proxy_pass http://servers;
            proxy_set_header HOST $http_host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header HTTP_CDN_SRC_IP $http_cdn_src_ip;
            proxy_redirect http://$server_name/ https://$server_name/;
        }

}


server {

        listen 80;
        server_name 域名;
        location / {
                 return 301 https://$server_name$request_uri;
        }
}

如上的配置包含了https的相关配置,‘域名’可以是二级域名,如果同时希望用户访问www.域名.com,域名.com同时可以实现跳转,那么需要配置两个listen 80的server配置,如下:

server {
    listen       80;
    listen       [::]:80; //IPV6
    server_name www.域名.cn;

    location / {
        return 301 https://$server_name$request_uri;
    }

}

server {
    listen       80;
    listen       [::]:80;
    listen 443 ssl;
    listen [::]:443 ssl;
    server_name 域名.cn;

    location / {
        return 301 https://www.域名.cn$request_uri;
        }
}

实现非80(443)端口的https配置

upstream servers {
    server 127.0.0.1:8095;
}

server {
    listen 6002;
    ssl on; 
    server_name 域名;
    ssl_certificate   ssl/a.pem;
    ssl_certificate_key  ssl/a.key;
    ssl_session_timeout 5m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;

    client_max_body_size 20M;

    location / {
		send_timeout 120;
		proxy_pass http://servers;
		proxy_set_header HOST $http_host;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		proxy_set_header HTTP_CDN_SRC_IP $http_cdn_src_ip;
	}
   // 访问http 6002端口跳转到https
   error_page 497 https://$server_name:6002$request_uri;
}

随机启动

vi /etc/rc.local, 使用vi 编辑器打开随机启动配置文件,并在其中加入下面一行代码(具体路径根据安装方式有所不同):

/usr/local/nginx/sbin/nginx

Nginx变量

$arg_PARAMETER                 功能:如果在请求中设置了查询字符串,那么这个变量包含在查询字符串是GET请求PARAMETER中的值。
$args                                        功能:该变量的值是GET请求在请求行中的参数。
$binary_remote_addr          功能:二进制格式的客户端地址
$body_bytes_sent                 功能:响应体的大小,即使发生了中断或者是放弃,也是一样的准确。
$content_length                    功能:该变量的值等于请求头中的Content-length字段的值
$cookie_COOKIE                    功能:该变量的值是cookie COOKIE的值
$document_root                   功能:该变量的值为当前请求的location(http,server,location,location中的if)中root指令中指定的值。
$document_uri                      功能:同$uri
$host                                        功能:该变量的值等于请求头中Host的值。如果Host无效时,那么就是处理该请求的server的名称。
在下列情况中,$host变量的取值不同于$http_host变量。
当请求头中的Host字段未指定(使用默认值)或者为空值,那么$host等于server_name指令指定的值。
当Host字段包含端口是,$host并不包含端口号。另外,从0.8.17之后的nginx中,$host的值总是小写。
$hostname                              功能:有gethostname返回值设置机器名。
$http_HEADER                       功能:该变量的值为HTTP 请求头HEADER,具体使用时会转换为小写,并且将“——”(破折号)转换为"_"(下划线)。
$is_args                                    功能: 如果设置了$args,那么值为“?”,否则为“”
$limit_rate                              功能:该变量允许限制连接速率。
$nginx_version                       功能: 当前运行的nginx的版本号
$query_string                         功能:同$args
$remote_addr                        功能:客户端的IP地址
$remote_user                        功能: 该变量等于用户的名字,基本身份验证模块使用。
$remote_port                        功能: 客户端连接端口
$request_filename               功能:该变量等于当前请求文件的路径,有指令root或者alias和URI构成。
$request_body                     功能:该变量包含了请求体的主要信息。该变量与proxy_pass或者fastcgi_pass相关。
$request_body_file              功能:客户端请求体的临时文件。
$request_completion          功能:如果请求成功完成,那么显示“OK”。如果请求没有完成或者请求不是该请求系列的最后一部分,那么它的值为空。
$request_method                功能:该变量的值通常是GET或者POST。
$request_uri                          功能:该变量的值等于原始的URI请求,就是说从客户端收到的参数包括了原始请求的URI,该值是不可以被修改的,不包含主机名,例如“/foo/bar.php?arg=baz”。
$scheme                                 功能:该变量表示HTTP scheme(例如HTTP,HTTPS),根据实际使用情况来决定,
   例如:rewrite  ^ $scheme://example.com$uri redirect;
$server_addr                         功能:该变量的值等于服务器的地址。通常来说,在完成一次系统调用之后就会获取变量的值,为了避开系统钓鱼,那么必须在listen指令中使用bind参数。
$server_name                       功能:该变量为server的名字。
$server)port                          功能:该变量等于接收请求的端口。
$server_protocol                 功能:该变量的值为请求协议的值,通常是HTTP/1.0或者HTTP/1.1
$uri                                        功能:该变量的值等于当前请求中的URI(没有参数,不包括$args)的值。它的值不同于request_uri,由浏览器客户端发送的request_uri的值。例如,可能会被内部重定向或者使用index。
 另外需要注意:$uri不包含主机名,例如 "/foo/bar.html"

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值