运维(27)-部署流量代理(Nginx+haproxy)

简介: 运维(27)-部署流量代理(Nginx+haproxy)

1. nginx

1.1 nginx安装

step1:查询当前可用版本

apt-cache madison nginx-full

step2:安装nginx

apt install -y nginx-full

1.2 配置nginx

步骤:

  • 修改nginx的主配置文件/etc/nginx/nginx.conf
  • worker_connections修改为 4096
  • http 模块,增加 real_ip 相关设置
  • 去掉server_names_hash_bucket_size、server_tokens、gzip_buffers、gzip_types 等行首原来的#注释
  • 增加 log_format配置。

nginx.conf示例如下:

user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;
events {
        worker_connections 4096;
        # multi_accept on;
}
http {
        ##
        # Basic Settings
        ##
        real_ip_header proxy_protocol;
        set_real_ip_from 10.0.0.0/8;
        set_real_ip_from 127.0.0.0/8;
        set_real_ip_from 172.16.0.0/12;
        set_real_ip_from 169.254.0.0/16;
        set_real_ip_from 192.168.0.0/16;
        set_real_ip_from 224.0.0.0/4;
        set_real_ip_from 240.0.0.0/4;
        sendfile on;
        tcp_nopush on;
        tcp_nodelay on;
        keepalive_timeout 65;
        types_hash_max_size 2048;
        server_tokens off;
        server_names_hash_bucket_size 64;
        # server_name_in_redirect off;
        include /etc/nginx/mime.types;
        default_type application/octet-stream;
        ##
        # SSL Settings
        ##
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE
        ssl_prefer_server_ciphers on;
        ##
        # Logging Settings
        ##
        log_format  main  '$http_host $remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
        access_log /var/log/nginx/access.log main;
        error_log /var/log/nginx/error.log;
        ##
        # Gzip Settings
        ##
        gzip on;
        # gzip_vary on;
        # gzip_proxied any;
        # gzip_comp_level 6;
        gzip_buffers 16 8k;
        # gzip_http_version 1.1;
        gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript ;
        ##
        # Virtual Host Configs
        ##
        include /etc/nginx/conf.d/*.conf;
        include /etc/nginx/sites-enabled/*;
}

1.3 验证重启

保存上述配置文件并退出编辑,测试配置的正确性,确认没有问题后,重载Nginx服务:

① .测试nginx配置文件

nginx -t

② .若上一步结果显示 successful ,则重载nginx服务件

systemctl reload nginx.service

1.4 配置默认路由

步骤:

  • 进入 /etc/nginx/sites-enabled/目录
  • 删除 default文件
  • 重新创建 default404 文件

default404 文件内容如下:

server{
    listen 80 default_server;
    server_name  _;
    return       404;
}
server{
    listen 443 ssl default_server;
    server_name _;
    return 404;
    ssl_certificate            /var/http-ssl/xxx.crt;
    ssl_certificate_key        /var/http-ssl/xxx.key;
    ssl_session_cache          shared:SSL:1m;
    ssl_session_timeout        5m;
    ssl_ciphers                HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers  on;
}

执行测试配置:

nginx -t

1.5 配置状态监听

/etc/nginx/sites-enabled/目录,创建 status 文件,内容如下:

server {
  listen 127.0.0.1:18080 default_server;
  access_log    off;
  location / {return 404;}
  location /nginx_status {
    stub_status  on;
  }
}

执行测试配置:

nginx -t

1.6 配置域名、证书和业务路由

/etc/nginx/sites-enabled/目录,创建 demo.xxx.cn 文件,内容如下:

server {
    listen       80;
    server_name  demo.xxx.cn;
    location ^~ /{
        return 301 https://demo.xxx.cn$uri;
    }
}
map $http_upgrade $connection_upgrade {
    default upgrade;
    '' close;
}
server {
    listen 443 ssl http2;
    server_name demo.xxx.cn;
    add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
    client_max_body_size 100M;
    ssl_certificate            /var/http-ssl/1_demo.xxx.cn_bundle.crt;
    ssl_certificate_key        /var/http-ssl/2_demo.xxx.cn.key;
    ssl_session_cache          shared:SSL:1m;
    ssl_session_timeout        5m;
    ssl_ciphers                HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers  on;
    location / {
        return 301 /project-pc/;
        #default_type text/plain;
        #return 403 ;
    }
    # 静态验证
    location /MP_verify_fxxx.txt {
        return 200 "fxxx";
    }
    location /MP_verify_lxxx.txt {
        return 200 "lxxx";
    }
    location /WW_verify_Axxx.txt {
        default_type text/plain;
        return 200 "Axxx";
    }
    location /rbac/ {
        proxy_set_header  Upgrade $http_upgrade;
        proxy_set_header  Connection $connection_upgrade;
        proxy_set_header  Host $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-Host $host;
        proxy_set_header  X-Forwarded-Proto https;
        proxy_pass        http://127.0.0.1:39401;
    }
    location /idm/ {
        proxy_set_header  Upgrade $http_upgrade;
        proxy_set_header  Connection $connection_upgrade;
        proxy_set_header  Host $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-Host $host;
        proxy_set_header  X-Forwarded-Proto https;
        proxy_pass        http://127.0.0.1:39402;
    }
    location /sso/ {
        proxy_set_header  Host $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-Host $host;
        proxy_set_header  X-Forwarded-Proto https;
        proxy_pass        http://127.0.0.1:39974;
    }
    # 普通静态,转发到根路径
    location /idm-web/ {
        proxy_set_header  Upgrade $http_upgrade;
        proxy_set_header  Connection $connection_upgrade;
        proxy_set_header  Host $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-Host $host;
        proxy_set_header  X-Forwarded-Proto https;
        proxy_pass        http://127.0.0.1:39403/;
    }
    location /rbac-web/ {
        proxy_set_header  Upgrade $http_upgrade;
        proxy_set_header  Connection $connection_upgrade;
        proxy_set_header  Host $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-Host $host;
        proxy_set_header  X-Forwarded-Proto https;
        proxy_pass        http://127.0.0.1:39404/;
    }
    # api转发
    location ~ ^/api-[a-z\-]*/ {
        proxy_set_header  Upgrade $http_upgrade;
        proxy_set_header  Connection $connection_upgrade;
        proxy_set_header  Host $host;
        proxy_set_header  X-Real-IP $remote_addr;
        proxy_set_header  X-Forwarded-For $remote_addr;
        proxy_set_header  X-Forwarded-Host $host;
        proxy_set_header  X-Forwarded-Proto https;
        proxy_pass        http://127.0.0.1:40001;
    }
    #web-basic
    location /basic/ {
        proxy_set_header  Host $host;
        proxy_set_header  X-Real-IP $remote_addr;
        proxy_set_header  X-Forwarded-For $remote_addr;
        proxy_set_header  X-Forwarded-Host $host;
        proxy_pass http://127.0.0.1:40017/;
    }
}

02 haproxy安装配置

2.1 安装haproxy

查询当前可用版本:

apt-cache madison haproxy

安装nginx:

apt install -y haproxy

2.2 配置haproxy

修改haproxy配置文件 /etc/haproxy/haproxy.cfg ,示例如下:

global
  log /dev/log  local0
  log /dev/log  local1 notice
  chroot /var/lib/haproxy
  stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners
  stats socket 127.0.0.1:14567
  stats timeout 30s
  user haproxy
  group haproxy
  daemon
  # Default SSL material locations
  ca-base /etc/ssl/certs
  crt-base /etc/ssl/private
  # See: https://ssl-config.mozilla.org/#server=haproxy&server-version=2.0.3&config=intermediate
        ssl-default-bind-ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
        ssl-default-bind-ciphersuites TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256
        ssl-default-bind-options ssl-min-ver TLSv1.2 no-tls-tickets
defaults
        option  dontlognull
        timeout connect 5s
        timeout client  120s
        timeout server  120s
listen stats
    bind 0.0.0.0:8181
    mode http
    stats enable
    stats hide-version
    stats uri /
listen swarm-dashboard
    bind 127.0.0.1:8080
    mode tcp
    option      tcp-check
    balance     roundrobin
    server swarm-dashboard_b_1 172.16.3.8:8080 check inter 2000 rise 2 fall 3
    server swarm-dashboard_b_2 172.16.3.9:8080 check inter 2000 rise 2 fall 3
    server swarm-dashboard_b_3 172.16.3.10:8080 check inter 2000 rise 2 fall 3
listen nacos
    bind 127.0.0.1:8848
    mode tcp
    option      tcp-check
    balance     roundrobin
    server nacos_b_1 172.16.3.8:8848 check inter 2000 rise 2 fall 3
    server nacos_b_2 172.16.3.9:8848 check inter 2000 rise 2 fall 3
    server nacos_b_3 172.16.3.10:8848 check inter 2000 rise 2 fall 3
listen idm
    bind 127.0.0.1:39402
    mode tcp
    option      tcp-check
    balance     roundrobin
    server idm_1 172.16.3.8:39402 check inter 2000 rise 2 fall 3
    server idm_2 172.16.3.9:39402 check inter 2000 rise 2 fall 3
    server idm_3 172.16.3.10:39402 check inter 2000 rise 2 fall 3
listen iam-web
    bind 127.0.0.1:39403
    mode tcp
    option      tcp-check
    balance     roundrobin
    server iam-web_1 172.16.3.8:39403 check inter 2000 rise 2 fall 3
    server iam-web_2 172.16.3.9:39403 check inter 2000 rise 2 fall 3
    server iam-web_3 172.16.3.10:39403 check inter 2000 rise 2 fall 3
listen rbac
    bind 127.0.0.1:39401
    mode tcp
    option      tcp-check
    balance     roundrobin
    server rbac_1 172.16.3.8:39401 check inter 2000 rise 2 fall 3
    server rbac_2 172.16.3.9:39401 check inter 2000 rise 2 fall 3
    server rbac_3 172.16.3.10:39401 check inter 2000 rise 2 fall 3
listen rbac-web
    bind 127.0.0.1:39404
    mode tcp
    option      tcp-check
    balance     roundrobin
    server rbac-web_1 172.16.3.8:39404 check inter 2000 rise 2 fall 3
    server rbac-web_2 172.16.3.9:39404 check inter 2000 rise 2 fall 3
    server rbac-web_3 172.16.3.10:39404 check inter 2000 rise 2 fall 3
listen sso
    bind 127.0.0.1:39974
    mode tcp
    option      tcp-check
    balance     roundrobin
    server sso_b_1 172.16.3.8:39974 check inter 2000 rise 2 fall 3
    server sso_b_2 172.16.3.9:39974 check inter 2000 rise 2 fall 3
    server sso_b_3 172.16.3.10:39974 check inter 2000 rise 2 fall 3

2.3 验证haproxy

保存上述配置文件并退出编辑,测试配置的正确性,确认没有问题后,重启服务:

测试配置文件是否有问题:

haproxy -c -f /etc/haproxy/haproxy.cfg

若上一步结果显示Configuration file is valid ,则重启服务:

systemctl restart haproxy.service


目录
相关文章
|
25天前
|
前端开发 应用服务中间件 nginx
Nginx配置详解Docker部署Nginx使用Nginx部署vue前端项目
Nginx配置详解Docker部署Nginx使用Nginx部署vue前端项目
101 0
|
2天前
|
JavaScript 前端开发 应用服务中间件
angular引入包、路由权限配置、打包问题与nginx配置问题(简单部署)
angular引入包、路由权限配置、打包问题与nginx配置问题(简单部署)
10 0
|
10天前
|
应用服务中间件 Linux 开发工具
如何在阿里云服务器快速搭建部署Nginx环境
以下是内容的摘要: 本文档主要介绍了在阿里云上购买和配置服务器的步骤,包括注册阿里云账号、实名认证、选择和购买云服务器、配置安全组、使用Xshell和Xftp进行远程连接和文件传输,以及安装和配置Nginx服务器的过程。在完成这些步骤后,你将能够在服务器上部署和运行自己的网站或应用。
|
16天前
|
存储 安全 应用服务中间件
解密Nginx限流机制:有效应对DDoS攻击与高并发流量
解密Nginx限流机制:有效应对DDoS攻击与高并发流量
29 0
|
25天前
|
应用服务中间件 nginx Windows
windows下Nginx+RTMP部署
windows下Nginx+RTMP部署
21 0
|
1月前
|
数据可视化 应用服务中间件 网络安全
简单易用的Nginx代理管理工具:体验便捷配置、高效管理
Nginx Proxy Manager是一款强大的代理服务器管理工具,提供简单直观的界面来配置和管理Nginx代理服务器,帮助用户轻松提升配置的简洁性和便捷性。
55 0
简单易用的Nginx代理管理工具:体验便捷配置、高效管理
|
1月前
|
NoSQL 关系型数据库 MySQL
Docker安装详细步骤及相关环境安装配置(mysql、jdk、redis、自己的私有仓库Gitlab 、C和C++环境以及Nginx服务代理)
Docker安装详细步骤及相关环境安装配置(mysql、jdk、redis、自己的私有仓库Gitlab 、C和C++环境以及Nginx服务代理)
224 0
|
1月前
|
应用服务中间件 Linux nginx
web后端-linux-nginx-1.18操作命令和部署
web后端-linux-nginx-1.18操作命令和部署
|
2月前
|
运维 Java 开发者
深入浅出:使用Docker容器化改善Java应用的部署与运维
在当今快速迭代的软件开发周期中,确保应用的一致性、可移植性与易于管理成为了开发与运维团队面临的重大挑战。本文旨在介绍如何通过Docker容器技术,有效地解决这些问题,特别是针对Java应用。我们将从Docker的基本概念出发,逐步深入到实际操作,展示如何将传统的Java应用容器化,以及这一过程如何帮助简化部署流程、提高应用的可靠性和可伸缩性。不同于常规的技术文章,本文试图以一种更加易于理解和实践的方式,让读者能够快速掌握容器化技术,并将其应用于日常的开发与运维工作中。
93 0
|
2月前
|
负载均衡 监控 应用服务中间件
Nginx负载均衡:你的网站流量翻倍利器
Nginx负载均衡:你的网站流量翻倍利器
43 0