nginx常用模块

  • 负载均衡
  • goAccess实现可视化并监控实时日志
  • 支持https
  • nginx配置域名
  • 跨域配置


nginx拥有丰富的模块,如何向其中添加各种官方、第三方的功能模块,如何通过修改配置文件来增强nginx的功能将是一个漫长的学习过程。

负载均衡

创建多个tomcat实例,通过配置反向代理来实现

通过upstream中配置ip_hash;

由于处理服务器扩容缩容后会引发大量请求迁移问题,nginx负载均衡建议使用一致性hash算法来配置,使用该模块需要下载并安装到nginx中,
1)下载)安装
找到nginx的configure脚本执行以下命令行

https://github.com/replay/ngx_http_consistent_hash
./configure —add-module=/root/ngx_http_consistent_hash-master
make && make install

3)修改upstream配置

upstream myServer {
			#请求url
			consistent_hash $request_uri;
			#consistent_hash $remote_addr;请求ip
            server 127.0.0.1:8080;
            server 127.0.0.1:8081;
     }

goAccess实现可视化并监控实时日志

wget https://tar.goaccess.io/goaccess-1.4.tar.gz
tar -xzvf goaccess-1.4.tar.gz
cd goaccess-1.4/
./configure --enable-utf8 --enable-geoip=legacy
make && make install

支持https

首先需要了解OpenSSL和TLS/SSL的关系

  1. TLS/SSL协议是设计规范,协议的具体实现有很多,但目前最通用的协议实现还是OpenSSL。首先OpenSSL是一个底层密码库,封装了所有的密码学算法、证书管理、TLS/SSL协议实现。
  2. OpenSSL库集成在大部分的操作系统中,从安全性和性能的角度考虑,尽可能使用最新版的库。
  3. HTTP和TLS/SSL协议组合在一起就是HTTPS,就是说HTTPS拥有HTTP的所有特征,并且HTTP消息有TLS/SSL协议进行安全保护。

nginx如何支持https

  1. Nginx服务为了支持HTTPS,需要和HTTP进行区分,默认监听443端口,当收到HTTPS请求后,Nginx服务器处理了所有的TLS/SSL协议通信后,再接着处理HTTP数据。
  2. 对于客户端浏览器来说,发送HTTPS请求就是连接服务器的443端口,将所有的HTTP数据传递给TLS/SSL协议,最终有TLS/SSL协议传递给TCL传输层。
  3. 对于服务器端的应用程序来说,无需关心HTTPS还是HTTP,他完全按照HTTP标准处理HTTP头部,负责输出内容,TLS/SSL对于开发者来说完全是透明的。
  4. TLS/SSL协议核心就是三大步骤:认证、秘钥协商、数据加密。

nginx配置域名

upstream testcom{
	    server 127.0.0.1:8080;
	}
    server {
        listen       80;
        server_name  www.test.com;

	    location / {
		   proxy_pass	http://testcom;
	    }
	    //静态资源放置在nginx根目录下如:staticData/static/login.html
        location /static {
            root   staticData;
        }
  }

跨域配置

location = /log {
                add_header 'Access-Control-Allow-Origin' $http_origin;
                 add_header 'Access-Control-Allow-Credentials' 'true';
                 add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
                 add_header 'Access-Control-Allow-Headers' 'DNT,web-token,app-token,Authorization,Accept,Origin,Keep-Alive,User-Agent,X-Mx-ReqToken,X-Data-Type,X-Auth-Token,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
                add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';
                if ($request_method = 'OPTIONS') {
                  add_header 'Access-Control-Max-Age' 1728000;
                   add_header 'Content-Type' 'text/plain; charset=utf-8';
                   add_header 'Content-Length' 0;
                   return 204;
                 }
        }