Nginx-SSL 多https证书配置 以及nginx常用配置、高可用负载均衡

本文详述了Nginx服务器HTTPS证书配置步骤,包括多域名证书设置、proxy_buffering参数详解及常见配置如正向代理、反向代理、负载均衡等。深入解析Nginx高可用集群搭建及Keepalived心跳检测配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.多https证书配置 

1. 进入nginx目录,cd /usr/local/nginx/conf

2. 创建cert文件夹,mkdir cert        把下载下来的key上传到文件夹中

3. 更改nginx.conf文件

新增一个server (如果是多个二级域名有多个证书,每个域名证书都加一个server)

server {
            #1.19版本用下面,不用listen 443;ssl on;

            #listen 443 ssl;
            
            listen 443;
			 server_name testA.test.com;
			 # 文件上传大小限制
			 client_max_body_size 100m;
             # 设置解决大json返回不完整问题
             proxy_buffers 16 1024k;
             proxy_buffer_size 1024k;

			 ssl on;

			 ssl_certificate   cert/2945634_testA.test.com.pem;
			 ssl_certificate_key  cert/2945634_testA.test.com.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 / {
			     root /usr/local/tomcat/sys-admin;
			 		 index index.html;
			 		 
                      location ~ .*\.(jpg|jpeg|gif|png|swf|htm|html|json|xml|svg|woff|ttf|eot|map|ico)$ {
						expires 10d;
						#expires 1h;
					 }
					 location ~ .*\.(js|css)?$ {
						expires 10d;
						#expires 5s;
				     }

			 		 location ~* \.(css|js|jpg|jpeg|gif|png|swf|htm|html|json|xml|svg|woff|ttf|eot|map|ico)$ {
							if (-f $request_filename) {
							    break;
							}
	    			}
	    			#以下设置为了获取用户的真实ip
	    			proxy_set_header Host $http_host;
						proxy_set_header X-Real-IP $remote_addr;
						proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
						proxy_set_header X-Forwarded-Proto $scheme;
						proxy_set_header X-NginX-Proxy true;
	    
				   		location ^~/sys {
							proxy_pass       http://127.0.0.1:8802;
						}
					
						# 动态页面,交给tomcat处理
						if ( !-e $request_filename) {

						}
			
			 }


    }
 server {
        listen 443;
			 server_name testB.test.com;
			 # 文件上传大小限制
			 client_max_body_size 100m;
             # 设置解决大json返回不完整问题
             proxy_buffers 16 1024k;
             proxy_buffer_size 1024k;

			 ssl on;

			 ssl_certificate   cert/2973071_testB.test.com.pem;
			 ssl_certificate_key  cert/2973071_testB.test.com.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 / {
			     root /usr/local/tomcat/sys-admin;
			 		 index index-admin.html;
			 		 
			 		 location ~* \.(css|js|jpg|jpeg|gif|png|swf|htm|html|json|xml|svg|woff|ttf|eot|map|ico)$ {
							if (-f $request_filename) {
							    break;
							}
	    			}
	    			
	    			proxy_set_header Host $http_host;
						proxy_set_header X-Real-IP $remote_addr;
						proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
						proxy_set_header X-Forwarded-Proto $scheme;
						proxy_set_header X-NginX-Proxy true;
	    
				   		location ^~/sys {
							proxy_pass       http://127.0.0.1:8802;
						}
						
						# 动态页面,交给tomcat处理
						if ( !-e $request_filename) {

						}
			
			 }


    }

报错问题解决

重启nginx可能遇到错误

nginx: [emerg] unknown directive "ssl" in /usr/local/nginx/conf/nginx.conf:1

这个时候nginx需要进行安装SSL服务,

去nginx解压目录下执行

./configure --with-http_ssl_module

 

2. 如果报错 ./configure: error: SSL modules require the OpenSSL library.则执行

或者 报错: make: *** 没有规则可以创建“default”需要的目标“build” 则执行以下语句

yum -y install openssl openssl-devel

./configure

./configure --with-http_ssl_module

3. 执行 make(切记不能 make install 会覆盖安装目录)

4. 将原来 nginx 备份

cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak

5. 将新的 nginx 覆盖旧安装目录

cp objs/nginx /usr/local/nginx/sbin/nginx

如果报错,执行 cp -rfp objs/nginx /usr/local/nginx/sbin/nginx

6. 测试 nginx 是否正确

/usr/local/nginx/sbin/nginx -t

二.常用配置和作用

1.正向代理(通过nginx服务器访问其他网址)

2.反向代理(通过nginx服务器 转发访问各个不同服务的节点)

3.负载均衡(通过nginx服务器 转发各个相同服务的节点)

4.动静分离(通过nginx服务器 可以分离服务接口和静态资源的访问)

 

proxy_buffering 设置

1. proxy_buffering  on;
该参数设置是否开启proxy的buffer功能,参数的值为on或者off。
如果这个设置为off,那么proxy_buffers和proxy_busy_buffers_size这两个指令将会失效。 
但是无论proxy_buffering是否开启,proxy_buffer_size都是生效的

2. proxy_buffer_size  4k;
该参数用来设置一个特殊的buffer大小的。
从被代理服务器(C)上获取到的第一部分响应数据内容到代理服务器(B)上,通常是header,就存到了这个buffer中。 
如果该参数设置太小,会出现502错误码,这是因为这部分buffer不够存储header信息。建议设置为4k。

3. proxy_buffers  8  4k;
这个参数设置存储被代理服务器上的数据所占用的buffer的个数和每个buffer的大小。
所有buffer的大小为这两个数字的乘积。

4. proxy_busy_buffer_size 16k;
在所有的buffer里,我们需要规定一部分buffer把自己存的数据传给A,这部分buffer就叫做busy_buffer。
proxy_busy_buffer_size参数用来设置处于busy状态的buffer有多大。

对于B上buffer里的数据何时传输给A,我个人的理解是这样的:
1)如果完整数据大小小于busy_buffer大小,当数据传输完成后,马上传给A;
2)如果完整数据大小不少于busy_buffer大小,则装满busy_buffer后,马上传给A;

5. proxy_temp_path
语法:proxy_temp_path  path [level1 level2 level3]
定义proxy的临时文件存在目录以及目录的层级。

例:proxy_temp_path /usr/local/nginx/proxy_temp 1 2;
其中/usr/local/nginx/proxy_temp为临时文件所在目录,1表示层级1的目录名为1个数字(0-9),2表示层级2目录名为2个数字(00-99)

6. proxy_max_temp_file_size
设置临时文件的总大小,例如 proxy_max_temp_file_size 100M;

7. proxy_temp_file_wirte_size
设置同时写入临时文件的数据量的总大小。通常设置为8k或者16k。

常用表达式语法了解

location 指令说明

该指令用于匹配 URL。

语法如下:

1、= :用于不含正则表达式的 uri 前,要求请求字符串与 uri 严格匹配,如果匹配成功,就停止继续向下搜索并立即处理该请求。

2、~:用于表示 uri 包含正则表达式,并且区分大小写。

3、~*:用于表示 uri 包含正则表达式,并且不区分大小写。

4、^~:用于不含正则表达式的 uri 前,要求 Nginx 服务器找到标识 uri 和请求字符串匹配度最高的 location 后,立即使用此 location 处理请求,而不再使用 location 块中的正则 uri 和请求字符串做匹配。

注意:如果 uri 包含正则表达式,则必须要有 ~ 或者 ~* 标识。

常用动静分离和反向代理配置

 server {
        listen       80;
        server_name  127.0.0.1;
		# 文件上传大小限制
		client_max_body_size 100m;


        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        # 静态页面目录
               
	   root        F:/ilikeit-crm/back/crm-admin-ui/dist;
		# 默认首页
        index      index.html;

        location / {

			# 用户浏览器端的缓存设置
			location ~ .*\.(jpg|jpeg|gif|png|swf|htm|html|json|xml|svg|woff|ttf|eot|map|ico)$ {
				expires 2s;
			}
			location ~ .*\.(js|css)?$ {
				expires 2s;
			}
			location ~* \.(css|js|jpg|jpeg|gif|png|swf|htm|html|json|xml|svg|woff|ttf|eot|map|ico)$ {
				if (-f $request_filename) {
						break;
				}
			}
			location ^~/sys {
		    	proxy_pass       http://127.0.0.1:8802;
			}
		
			
			# 动态页面,交给tomcat处理
			if ( !-e $request_filename) {

			}
		}

 

负载均衡配置

1、轮询(默认)

每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。

2weight

weight 代表权,重默认为 1,权重越高被分配的客户端越多

3ip_hash

每个请求按访问 ip  hash 结果分配,这样每个访客固定访问一个后端服务器,可以解决 session 的问题。

upstream server_name{

      ip_hash

      server 192.168.5.212:80;

      server 192.168.5.222:80;

}

4fair(第三方)

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

upstream server_name{

      server 192.168.5.212:80;

      server 192.168.5.222:80;

      fair;

}

高可用集群(主从搭建)

使用Keepalived+nginx。利用Keepalived心跳检测,执行 脚本来检测nginx的是否正常使用

在两台nginx服务器上都搭建安装Keepalived。创建配置一个虚拟ip。通过访问虚拟ip来通过nginx(主或从)请求服务。

Keepalived配置文件详细配置:

global_defs {

    notification_email {

        acassen@firewall.loc

        failover@firewall.loc

        sysadmin@firewall.loc

    }

    notification_email_from Alexandre.Cassen@firewall.loc

    smtp_server 192.168.17.129

    smtp_connect_timeout 30

    router_id LVS_DEVEL
    
}

vrrp_script chk_http_port {
    script "/usr/local/src/nginx_check.sh"

    interval 2	#(检测脚本执行的间隔)

    weight 2

}
vrrp_instance VI_1 {

    state BACKUP	# 备份服务器上将 MASTER 改为 BACKUP

    interface ens33	//网卡

    virtual_router_id 51	# 主、备机的 virtual_router_id 必须相同

    priority 100	# 主、备机取不同的优先级,主机值较大,备份机值较小

    advert_int 1

    authentication {

    auth_type PASS


    auth_pass 1111

}

virtual_ipaddress {

    192.168.17.50 // VRRP H 虚拟地址

}

检测脚本:

#!/bin/bash

A=`ps -C nginx –no-header |wc -l`

if [ $A -eq 0 ];then

/usr/local/nginx/sbin/nginx

sleep 2

if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then killall keepalived

fi

fi

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值