【Nginx】反向代理,安装-配置-卸载

安装Nginx

  1. 更新系统包

    在安装任何新软件前,建议先更新系统的软件包,以此确保所有依赖项都是最新

    yum update -y

  2. 安装nginx

    dnf install nginx -y

  3. 启动并设置开机自启

    systemctl start nginx

    systemctl enable nginx

  4. 检查nginx状态

    systemctl status nginx

  5. 验证nginx是否正常工作

    在浏览器访问服务器,http://<your-server-ip>

  6. 验证nginx版本

    nginx -v

  7. 自定义配置

    安装完成后的nginx配置文件,通常位于/etc/nginx/nginx.conf

    站点配置文件通常位于/etc/nginx/conf.d/

    在修改完配置文件后 可以使用nginx -t检查语法

    重新加载服务使新配置生效

    systemctl reload nginx

  8. 若启用了防火墙,需要额外对http和https服务放行

    firewall-cmd --permanent --add-service=http

    firewall-cmd --permanent --add-service=https

    firewalld-cmd —reload

配置文件解析

块名主要作用
全局块定义全局设置
events配置事件处理模型
http定义http协议相关的核心规则
server定义虚拟主机的配置
location定义URL请求的处理规则
upsteam定义后端服务器的负载均衡池
map动态生成变量
types定义MIME类型映射

1. 全局块

位于配置文件的最顶层,没有嵌套在任何块中

作用:

定义全局设置,影响整个服务的行为

常见配置:

user nginx;  # 指定运行nginx的用户和组
worker_processes auto;   # 设置工作进程的数量,auto表示自动根据CPU分配
error_log /var/log/nginx/error.log warn;  # 定义错误日志的路径 和 记录级别
pid /var/run/nginx.pid;  # 指定nginx主进程的PID文件路径

2. events块

紧接在全局块之后,定义事件处理模型

作用:

配置nginx事件处理机制,优化性能

常见配置:

events {
    worker_connections 10240;  # 每个工作进程允许的最大连接数
    use epoll;   # 指定使用的事件驱动模型 (epoll 或 kqueue )
    multi_accept on;  # 是否允许一个工作进程同时接受多个连接
}

3. http块

包含所有与http协议相关的配置

作用:

  • 定义nginx处理http请求的核心规则
  • 可以包括多个子块( server、upSteam 等)

常见配置:

http {
    include mime.types;  # 引入外部配置文件
    default_type application/octet-stream;  # 设置默认的MIME类型

		# log_format 和 access_log 定义访问日志格式和路径
    log_format main '$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;

		# sendfile 和 tcp_nopush 优化文件传输性能
    sendfile on;
    tcp_nopush on;
    keepalive_timeout 65;   # 设置HTTP Kepp_Alive超时时间
    gzip on;   # 启用Gzip压缩
}

4. server块

嵌套在http块中

作用:

  • 定义虚拟主机( Virtual Host )配置
  • 每个server块 可以处理一个 或 多个域名的请求

常见配置:

server {
        listen       443 ssl;   # 指定监听端口 , 并启用 SSL
        server_name  erp.abcd-sps.com;  # 定义服务器名称(域名)
				
				# SSL 配置部分 
						# 指定证书路径
						# 指定私钥路径
						# 配置SSL 会话缓存,提升性能
						# SSL 会话超时时间
        # SSL configuration
        ssl_certificate         /usr/local/nginx/conf/cert/erp.gq-sps.com.pem;
        ssl_certificate_key     /usr/local/nginx/conf/cert/erp.gq-sps.com.key;
        ssl_session_cache       shared:SSL:1m;
        ssl_session_timeout     5m;
        }

5. location块

嵌套在server块中

作用:

  • 定义如何处理特定的URL请求
  • 支持精准匹配、前缀匹配、正则表达式匹配等多种方式

常见配置:

location / {
						# 如果后端放回的是HTTP重定向,则将其改为HTTPS重定向
            proxy_redirect http:// https://;   
            
            # 将客户端请求中的Host头传递给后端服务器 
            proxy_set_header Host $http_host; 
            
            # 将客户端的真实IP地址追加到X-Forwarded-For,方便后端识别原始请求者
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            
            proxy_connect_timeout 6000s;   # 代理连接的超时时间
            proxy_send_timeout 6000s;    # 代理发送的超时时间
            proxy_read_timeout 6000s;    # 代理读取的超时时间
            
            #将请求转发到'erpServer'的后端服务器,后端服务器在upstream块中定义
            proxy_pass http://erpServer;   

6. upstream块

嵌套在HTTP块中

作用:

  • 定义一组后端服务器,用于负载均衡

常见配置:

upstream erpServer {   
    server 192.168.0.1 weight=3;  # 定义后端服务器的地址、端口和权重
    server 192.168.0.2;
    ip_hash;  # 用于客户端IP的会话保持,无此参数默认轮询
}

大多情况下,一个用Nginx搭建的反向代理服务器,无需用到 map 和 types 块,

某企业nginx实例:

#user root;   # 指定运行nginx的用户,注释状态,即使用默认用户
worker_processes auto;   # 自动设置工作进程数,通常等于CPU核心数
error_log logs/error.log;   # 设置错误日志路径和级别
pid logs/nginx.pid;    # 指定nginx进程PID路径

events {
    worker_connections 10240;  # 每个工作进程允许的最大连接数
    use epoll;  
}

http {
    server_tokens off;   # 禁用服务器版本号显示,增强安全性
    include mime.types;  # 包含MIME类型定义文件,用于映射文件扩展名到MIME类型
    default_type application/octet-stream;  # 设置默认MIME类型
		
		# 定义日志格式'mian' 记录标准的访问日志信息
    log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                    '$status $body_bytes_sent "$http_referer" '
                    '"$http_user_agent" "$http_x_forwarded_for"';
		
		# 定义JSON格式的日志格式,记录更详细的请求信息
    log_format json '{'
        '"slbip":"$remote_addr",'
        '"clientip":"$http_x_forwarded_for",'
        '"serverip":"$server_addr",'
        '"size":$body_bytes_sent,'
        '"responsetime":$request_time,'
        '"host":"$host",'
        '"method":"$request_method",'
        '"requesturi":"$request_uri",'
        '"url":"$uri",'
        '"upstream_addr":"$upstream_addr",'
        '"upstream_status":"$upstream_status",'
        '"upstream_cache_status":"$upstream_cache_status",'
        '"upstream_response_time":"$upstream_response_time",'
        '"appversion":"$HTTP_APP_VERSION",'
        '"referer":"$http_referer",'
        '"agent":"$http_user_agent",'
        '"status":"$status",'
        '"devicecode":"$http_device_code"'
    '}';
    access_log logs/access.log main;  # 指定访问日志路径和格式

    sendfile on;   # 启用sendfile 优化传输性能
    tcp_nopush on;  # 启用tcp_nopush  确保数据包一次性发送,减少延迟

    keepalive_timeout 120;  # 设置长连接时间为120S

    gzip on;   #启用Gzip压缩,减少传输数据量
    gzip_min_length 1k;   # 最小压缩的文件大小
    gzip_buffers 4 16k;   # 压缩缓存区数量和大小
    gzip_http_version 1.1;  # 设置GZIP支持的HTTP协议版本
    gzip_comp_level 2;    # 设置压缩级别
    
    # 设置需要压缩的MIME类型
    gzip_types text/plain text/css text/xml text/javascript application/json application/xml application/xml+rss
               application/javascript application/x-javascript image/svg+xml;
               
    # 在响应头中添加 `Vary: Accept-Encoding`,告知客户端支持压缩
    gzip_vary on;

    # ERP upstream   # 定义后端服务器组
    upstream erpServer {
        server 172.23.155.201:8899;
        server 172.23.155.210:8899;
    }

    # SmartBI upstream
    upstream smartbi_backend {
        server 192.168.0.17:18080;
    }

    # OLAP upstream
    upstream upstream_olap {
        server 192.168.0.17:18081;
    }

    # Export upstream
    upstream upstream_export {
        server 192.168.0.17:3003;
    }

    # MPP upstream
    upstream upstream_mpp {
        server 192.168.0.17:8123;
    }

		# 配置ERP服务的HTTPS服务模块
    # Server block for ERP
    server {
        listen       443 ssl;  # 指定监听端口并启用SSL
        server_name  erp.gq-sps.com;  # 服务器名称

        # SSL 配置部分
        # 指定SSL证书和密钥路径
        ssl_certificate         /usr/local/nginx/conf/cert/erp.gq-sps.com.pem;
        ssl_certificate_key     /usr/local/nginx/conf/cert/erp.gq-sps.com.key;
        
        #配置SSL会话缓存
        ssl_session_cache       shared:SSL:1m;
        ssl_session_timeout     5m;  #会话超时时间

        location / {
            proxy_redirect http:// https://;  # 替换后端返回的 HTTP 链接为 HTTPS
            proxy_set_header Host $http_host; # 转发原始 Host 头
            
            # 添加客户端真实 IP
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            
            # 设置代理连接/发送/读取超时时间
            proxy_connect_timeout 6000s;
            proxy_send_timeout 6000s;
            proxy_read_timeout 6000s;
            
             # 将请求转发到 ERP 上游服务器组
            proxy_pass http://erpServer;
        }
    }

    # Server block for SmartBI and other modules
    server {
        listen       443 ssl;
        server_name  smartbi.gq-sps.com;

        # SSL configuration
        ssl_certificate         /usr/local/nginx/conf/cert/smartbi.gq-sps.com.pem;  # Replace with actual path
        ssl_certificate_key     /usr/local/nginx/conf/cert/smartbi.gq-sps.com.key;  # Replace with actual path
        ssl_session_cache       shared:SSL:1m;
        ssl_session_timeout     5m;

        # Health check endpoint
        location /healthz {
            access_log off;
            return 200 'OK\n';
            add_header Content-Type text/plain;
        }

        # Redirect root path to SmartBI login page
        location / {
            return 301 https://$host/smartbi/vision/index.jsp;
        }

        # Proxy for SmartBI
        location /smartbi {
            proxy_pass http://smartbi_backend/smartbi;
            proxy_set_header Cookie $http_cookie;
	        proxy_redirect http:// https://;  # 替换后端返回的 HTTP 链接为 HTTPS
	   #  proxy_redirect off;
            proxy_set_header Host $host:$server_port;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
	    client_max_body_size 100M;
            client_body_buffer_size 100M;
            proxy_connect_timeout 300s;
            proxy_send_timeout 300s;
            proxy_read_timeout 300s;
            proxy_buffer_size 50M;
            proxy_buffering on;
            proxy_buffers 4 50M;
            proxy_busy_buffers_size 50M;
            proxy_temp_file_write_size 50M;
            proxy_max_temp_file_size 2048M;
 
}

        # Proxy for OLAP
        location /smartbiolap {
            proxy_pass http://upstream_olap;
            proxy_set_header Cookie $http_cookie;
           proxy_redirect off;
            proxy_set_header Host $host:$server_port;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            client_max_body_size 100M;
            client_body_buffer_size 100M;
            proxy_connect_timeout 300s;
            proxy_send_timeout 300s;
            proxy_read_timeout 300s;
            proxy_buffer_size 50M;
            proxy_buffering on;
            proxy_buffers 4 50M;
            proxy_busy_buffers_size 50M;
            proxy_temp_file_write_size 50M;
            proxy_max_temp_file_size 2048M;
        }

        # Proxy for Export
        location /smartbiexport {
            proxy_pass http://upstream_export;
	    proxy_set_header Cookie $http_cookie;
            proxy_redirect off;
            proxy_set_header Host $host:$server_port;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
	    client_max_body_size 100M;
            client_body_buffer_size 100M;
            proxy_connect_timeout 300s;
            proxy_send_timeout 300s;
            proxy_read_timeout 300s;
            proxy_buffer_size 50M;
            proxy_buffering on;
            proxy_buffers 4 50M;
            proxy_busy_buffers_size 50M;
            proxy_temp_file_write_size 50M;
            proxy_max_temp_file_size 2048M;
        }

        # Proxy for MPP
        location /mpp {
            proxy_pass http://upstream_mpp;
            proxy_set_header Host $host:$server_port;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
	  }
    }

    # 配置 HTTP 到 HTTPS 的重定向规则(ERP)
    server {
        listen       80;
        server_name  erp.gq-sps.com;

        return 301 https://$host$request_uri; # 强制跳转到 HTTPS
    }

    # 配置 HTTP 到 HTTPS 的重定向规则(SmartBI)
    server {
        listen       80;
        server_name  smartbi.gq-sps.com;

        return 301 https://$host$request_uri;
    }
}

卸载Nginx

  1. 确认系统中是否已安装nginx

    nginx -v

    确认是否rpm包管理器安装

    rpm -q nginx

  2. 停止nginx服务

    systemctl stop nginx

  3. 卸载nginx

    yum remove nginx

    dnf remove nginx

  4. 删除残留文件

    rm -rf  /etc/nginx/  #配置文件
    rm -rf  /var/log/nginx/  #日志文件
    rm -rf  /var/cache/nginx  #缓存和临时文件
    rm -rf  /usr/sbin/nginx
    
  5. 检查卸载是否成功

    nginx -v

  6. 清理yum/dnf缓存(可选)

    yum clean all

    dnf clean all

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值