img

Nginx配置总结

旁观者 1年前 ⋅ 897 阅读

Nginx是一个高性能的HTTP和反向代理web服务器,记录一下常用的nginx配置

一.反向代理

server {
    listen port;
    server_name domain
    location / {
        proxy_pass http://ip:port;
        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;
    }
}

二.静态文件代理

server{
    listen port;
    server_name domain
    location /path {
        root /dir;
        index index.html;
    }
}

解决刷新出现404情况:

location /path {
  root  /dir;
  index index.html;
  try_files $uri $uri/ /path/index.html
}

三.缓存

proxy_cache_path /var/cache/nginx/cache levels=1:2 keys_zone=cachename:300m inactive=5h max_size=10g;

server {
    listen port;
    server_name domain;
    location ~* ^.+\.(css|js|ico|gif|jpg|jpeg|png)$ {
	#关闭日志
	log_not_found off;
	access_log off;
	#浏览器缓存时间7天
	expires 7d;
	
	proxy_pass http://localhost:56991;
	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;
	proxy_cache cachename;
	proxy_ignore_headers Cache-Control;
	#缓存过期管理
	proxy_cache_valid 200 302 5h;
	proxy_cache_valid 404 10m;
	proxy_cache_valid any 1h;
	proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504;
	add_header X-Cache-Status $upstream_cache_status;
}
}	

四.负载均衡

upstream backserver{
##ip_hash;fair;url_hash; ##ip_hash算法不支持backup、weight设置。默认权重为1。
server 127.0.0.1:9090 down;
server 127.0.0.1:8080 weight=2;
server 127.0.0.1:7070 backup;
server 127.0.0.1:6060;
server 127.0.0.1:5050 max_fails=2 fail_timeout=10s;
}

分配规则:

1.默认轮询

2.weight 3; 加权

3.ip_hash; 根据ip的hash分配服务

4.url_hash; 根据url的hash分配服务

5.fair; 服务器的响应时间来分配请求

6.down; server不参与负载

7.backup; 非backup server停止时参与请求

8.max_fails; 请求失败次数(默认为1),返回proxy_next_upstream定义

9.fail_timeout; max_fails次失败后,暂停的时间

server {
    listen port;
    server_name domain
    location / {
        proxy_pass http://ip:port;
        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;
    }
}

五.限速限流

##并发控制

limit_conn_zone $binary_remote_addr zone=conname:10m;

##限流控制

limit_req_zone $binary_remote_addr zone=reqname:10m rate=10r/s; ##每秒10个请求(同一IP)

limit_req_zone $binary_remote_addr $uri zone=reqname:10m rate=10r/s; ##每秒10个请求,(同一IP访问相同uri)

limit_req_zone $binary_remote_addr $request_uri zone=reqname:10m rate=10r/s; ##每秒10个请求(同一IP访问相同uri,带客户端请求参数)

server {
    location / {
      proxy_pass http://ip:port;
      #limit
      limit_conn conname 3; 			##一个会话只能进行3个连接
      limit_req zone=reqname burst=20 nodelay;	##每个IP一秒钟只处理10个请求,burst:排队大小,nodelay:不限制单个请求时间
    }
}

##限制传输速度

location /download { 
    limit_rate 128k; 
  } 

#如果想设置用户下载文件的前10m大小时不限速,大于10m后再以128kb/s限速可以增加以下配内容,修改nginx.conf文件

location /download { 
       limit_rate_after 10m; 
       limit_rate 128k; 
 } 

六.配置https代理

1.申请SSL证书

阿里云等云产品途径申请一年免费的

freessl.cn申请

Let's Encrypt 使用生成证书


2.上传证书到服务器

/../nginx/cert


3.配置nginx

server {
	listen     443;
	server_name  domain;

	ssl on;
	ssl_certificate  证书;
	ssl_certificate_key  密钥;
	ssl_session_cache    shared:SSL:1m;
	ssl_session_timeout  5m;

	ssl_ciphers  HIGH:!aNULL:!MD5;
	ssl_prefer_server_ciphers  on;

	location / {
	}
}

常见问题:

报错[emerg] the "ssl" parameter requires ngx_http_ssl_module in /usr/local/nginx/conf/nginx.conf:69解决

1.安装OpenSSL
yum -y install openssl openssl-devel
2.在nginx安装目录下执行
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
3.运行命令
make
4.然后备份原有已安装好的nginx
cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak
5.关闭nginx
./nginx -s stop
6.将刚刚编译好的nginx覆盖掉原有的nginx(这个时候nginx要停止状态)
cp ./objs/nginx /usr/local/nginx/sbin/
7.通过命令查看是否已经加入成功
 /usr/local/nginx/sbin/nginx -V

七.其他

1.http请求包体的最大值:

client_max_body_size 200m;

2.压缩

  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 application/javascript text/css text/xml application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png application/json;
  gzip_vary off;
  gzip_disable "MSIE [1-6]\.";

3.格式:location ??? {}

优先级:

a. = /error.html ##完整匹配

b. ^~ /images/ ##开头等于

c. ~* .(gif|jpg|jpeg|png|bmp|swf)$ ##不区分大小的正则

d. /static/ ##开头等于,优先级比第二种低

e. /

4.强转:

rewrite ^(.*) https://$server_name$1 permanent;

5.重启nginx

./nginx -s reload

或者:

./nginx -s quit

/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

6.正则匹配

server {
    listen 80;
    server_name *.delpast.com;
    set $head "test";
    if ($http_host ~* "^(.*)\.delpast\.com$") {
        set $head $1;
    }
    location / {
        if ( $head = 'bushu' ) {
          proxy_pass http://localhost:9050;
        }
    }
}

7.隐藏版本号

在http{} 添加

server_tokens off;


全部评论: 0

    我有话说: