文章主题

了解nginx常用的配置

前置条件

已经安装好了nginx,如未安装请参考nginx安装和基本配置

正文

auth_basic的认证配置

auth_basic在nginx里用的应该比较多,经常用于一些不能认证功能应用的基础授权。例如您可以将其用在kibana中

1.首先需要生成用户名和密码

使用openssl来生成,生成命令(openssl在安装nginx的时候已经安装)

echo "kibana:$(openssl passwd -crypt 1234567890)" >>/usr/local/nginx/conf/httpasswd
echo "consul:$(openssl passwd -crypt 1234567890)" >>/usr/local/nginx/conf/httpasswd
echo "etcd:$(openssl passwd -crypt 1234567890)" >>/usr/local/nginx/conf/httpasswd
2.为需要授权的资源添加授权配置
server{ 
      listen 50813; 
      location / {
        auth_basic    "please login";
        auth_basic_user_file /usr/local/nginx/conf/httpasswd;
        proxy_http_version 1.1;      
        proxy_pass  http://kibana;
      } 
    }

auth_basic_user_file:是用户名和密码的配置文件地址

nginx 是否能获取到 mac地址 nginx keycloak_ci

ssl的配置

首先您需要先购买证书,如果只是想用于实验,可以尝试Let’s Encrypt,申请地址:https://www.sslforfree.com/, 需要按照提示在域名管理控制台添加TXT记录

nginx 是否能获取到 mac地址 nginx keycloak_ci_02

server{ 
	    listen 443;
		server_name rabbitmq.honeysuckle.site;
		ssl on;
		ssl_certificate   /usr/local/nginx/cert/certificate.crt;
		ssl_certificate_key  /usr/local/nginx/cert/private.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;	  
		location / {
			proxy_set_header Host $http_host;
			proxy_set_header X-Forward-For $http_x_forwarded_for;
			proxy_http_version 1.1;	  
			proxy_pass  http://mqweb_backends;
		} 
    }
  • ssl on 为指定虚拟机启用HTTPS protocol
  • ssl_certificate 当前虚拟主机使用PEM格式的证书文件
  • ssl_certificate_key 当前虚拟主机上与其证书匹配的私钥文件
  • ssl_protocols 支持ssl协议版本
  • ssl_session_timeout 客户端连接可以复用ssl session cache中缓存的ssl参数的有效时长,默认5m
  • ssl_ciphers 指定启用的密码。密码以OpenSSL库理解的格式指定,可以使用“ openssl ciphers”命令查看完整列表。

常用的负载均衡算法

轮询策略(轮询加权/round-robin)
http {
    upstream tomcats {
        server 192.168.0.180:8080 weight=1 fail_timeout=20s;
        server 192.168.0.181:8080 weight=2 fail_timeout=20s;
    }
    server {
        server_name www.test.com
        listen 80;
        location / {
            proxy_pass http://tomcats;
        }
    }
}
  • 上面通过weight参数指定了轮询机率,weight和访问比率成正比,用于后端服务器性能不均的情况。
  • 如果不加权重,将按照默认的等比权重进行代理
ip_hash(ip绑定)
http {
    upstream tomcats {
        ip_hash; 
        server 192.168.0.180:8080 weight=1 fail_timeout=20s;
        server 192.168.0.181:8080 weight=2 fail_timeout=20s;
    }
    server {
        server_name www.test.com
        listen 80;
        location / {
            proxy_pass http://tomcats;
        }
    }
}

使用ip_hash来解决有状态的会话,每个访客固定访问一个后端服务器

fair
http {
    upstream tomcats {
        fair; 
        server 192.168.0.180:8080;
        server 192.168.0.181:8080;
    }
    server {
        server_name www.test.com
        listen 80;
        location / {
            proxy_pass http://tomcats;
        }
    }
}

按后端服务器的响应时间来分配请求,响应时间短的优先分配。

url_hash
http {
    upstream tomcats {
        hash $request_uri;
        server 192.168.0.180:8080;
        server 192.168.0.181:8080;
    }
    server {
        server_name www.test.com
        listen 80;
        location / {
            proxy_pass http://tomcats;
        }
    }
}

按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效

常用参数说明


引用链接