一.多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 掉,能自动剔除。
2、weight
weight 代表权,重默认为 1,权重越高被分配的客户端越多
3、ip_hash
每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器,可以解决 session 的问题。
upstream server_name{
ip_hash
server 192.168.5.212:80;
server 192.168.5.222:80;
}
4、fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
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