Nginx安装配置(Linux),反向代理,负载均衡

目录

1.Nginx简介

2.Nginx安装

3.Nginx做反向代理

4.Nginx做负载均衡


1. Nginx简介

Nginx(发音同engine x)是一个异步框架的 Web 服务器,也可以用作反向代理,负载平衡器 和 HTTP 缓存。该软件由 Igor Sysoev 创建,并于2004年首次公开发布。同名公司成立于2011年,以提供支持。Nginx 是一款免费的开源软件,根据类 BSD 许可证的条款发布。一大部分Web服务器使用 Nginx ,通常作为负载均衡器。

nginx官方文档

如果嫌英文看不懂,这边推荐一下W3Schools的教程,W3Schools教程

2.Nginx安装

前提需要先安装yum依赖

bash 复制代码
yum install -y gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel

你可以进入nginx官网,右键复制链接选择不同版本,然后见下方代码,将链接放到wget后面。

bash 复制代码
	cd /opt     进入根目录下的 opt 目录
	wget http://nginx.org/download/nginx-1.16.1.tar.gz     下载tar包
	tar -zxvf nginx-1.16.1.tar.gz -C /usr/local/java       解压到 /usr/local/java 目录下(java目录需要自行创建)

	解压完成后,你会在 /usr/lcoal/java 目录下会多出一个目录 nginx-1.16.1

	cd /usr/local/java/nginx-1.16.1      进入 nginx-1.16.1 目录
	./configure                          执行 ./configure 命令
	make && make install                 编译并安装

	编译安装完后,在 /usr/local/ 目录下会自动生成一个 nginx 目录,代表安装成功!

启动nginx

bash 复制代码
	cd /usr/local/nginx/sbin/      进入 sbin 目录
	./nginx                        启动 Nginx

此时nginx已经启动,你可以在浏览器中输入ip端口:80,如果出现无法访问,可能是防火墙没有开启80端口。

Linux中有两种防火墙软件,ConterOS 7.0以上使用的是 firewallConterOS 7.0以下使用的是 iptables

bash 复制代码
	firewall-cmd --zone=public --add-port=8080/tcp --permanent      开放8080端口

	firewall-cmd --zone=public --remove-port=8080/tcp --permanent   关闭8080端口

	firewall-cmd --reload     更新配置信息(这样就不需要重启防火墙了)

将80端口开放,如果没有安全考虑,就可以直接关掉防火墙。

bash 复制代码
	systemctl status firewalld      查看防火墙状态

	systemctl start firewalld       启动防火墙

	systemctl stop firewalld        关闭防火墙

	systemctl restart firewalld     重启防火墙

	systemctl enable firewalld      设置开机自启

	systemctl disable firewalld     禁用开机启动

然后在次输入ip端口:80

出现这个界面,恭喜你成功安装好nginx。

3.Nginx做反向代理

有反向肯定有正向代理,这边不讨论,反向代理位于客户端和服务器之间,接收客户端的请求,然后根据配置规则将请求透明地转发到后端服务器,并将服务器的响应返回给客户端。客户端感知不到后端服务器的存在,仿佛所有请求都是直接与反向代理交互。其实说白了有点像中间商。

Nginx的反向代理配置主要在nginx.conf或包含的子配置文件(如/.conf)中进行。配置主要包括以下部分:

HTTP服务器块 (server): 定义监听的IP地址、端口以及与之关联的域名(server_name)。

位置块 (location): 根据请求URI进行匹配,并定义在此范围内应执行的操作,如反向代理。

反向代理指令 (proxy_pass): 指定请求应被转发到的后端服务器的URL。Nginx将替换匹配到的位置块中的URI,并将其发送到指定的后端服务器。

以下是一个代码示例:

java 复制代码
http {
    # 基本HTTP服务器配置
    server {
        listen 80;                 # 监听端口
        server_name example.com;   # 绑定域名
 
        # 匹配所有请求,将它们转发到后端服务器
        location / {
            proxy_pass http://backend-server:8080;  # 后端服务器地址与端口
            proxy_set_header Host $host;             # 保留原始Host头
            proxy_set_header X-Real-IP $remote_addr; # 传递真实客户端IP
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;  # 传递请求协议(http/https)
 
            # 其他可选配置,如缓存、超时、重试等
        }
    }
}

代码注释:

listen: 指定Nginx监听的IP地址和端口,这里为标准HTTP端口80。

server_name: 设置服务器块所关联的域名,即客户端请求的域名。

location /: 匹配所有以根路径("/")开头的请求。

proxy_pass: 设置后端服务器的URL。此处将所有匹配到的请求转发到http://backend-server:8080

proxy_set_header: 设置请求转发时要修改或添加的HTTP头部。这些指令用于保持与后端服务器的正确交互,如:

Host: 保持原请求的Host头,确保后端服务器能够正确识别请求的目的主机。

X-Real-IP: 传递真实的客户端IP地址,防止后端服务器因反向代理而获取到Nginx服务器的IP。

X-Forwarded-For: 传递经过代理链的客户端IP列表,多个代理时会追加。

X-Forwarded-Proto: 传递原始请求的协议(http或https),以便后端服务器识别请求是否经过SSL加密。

如果要配置https的反向代理,则还需要添加SSL证书和私钥,以下是一个代码示例:

java 复制代码
server {
    listen 443 ssl;  # 监听HTTPS端口
    server_name example.com;
    ssl_certificate /path/to/certificate.crt;
    ssl_certificate_key /path/to/private.key;
 
    # 其他SSL配置项,如CA证书、密码、加密套件等...
 
    location / {
        proxy_pass http://backend;
        # 保持或调整与HTTPS相关的HTTP头
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header 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-Proto https;
    }
}

4.Nginx做负载均衡

什么是负载均衡,单从字面理解可以解释为N台服务器平均分担负载,不会因为某台服务器负载高宕机而出现某台服务器闲置的情况。那么负载均衡的前提就是要有多台服务器才能实现,目的是达到整个系统的高性能和高可用性。

在深入探讨Nginx作为反向代理的负载均衡功能时,我们可以发现它与普通负载均衡软件之间存在一些关键的区别。例如,LVS这样的负载均衡器主要负责对请求数据包进行转发,可能还会对数据包进行一些修改。在直接路由(DR)模式下,从负载均衡器后面的节点服务器的视角来看,接收到的请求仍然源自访问负载均衡器的真实用户。

相比之下,Nginx的反向代理功能则更为复杂。它不仅接收用户的请求,而且会代表用户向代理下的节点服务器重新发起请求。在这个过程中,节点服务器接收到的请求看起来就像是来自反向代理服务器,而非原始的客户端用户。

简而言之,LVS等负载均衡器的工作是转发用户请求的数据包,而Nginx的反向代理则是在接收到用户请求后,代表用户向节点服务器发起新的请求。这种差异使得Nginx在处理请求时能够提供更高级的控制和灵活性,同时也为实现更复杂的负载均衡策略提供了可能。

接下来我将给出nginx负载均衡的具体配置,前提是你已经安装好了nginx

1.编辑Nginx的配置文件 ,通常位于/etc/nginx/nginx.conf/etc/nginx/sites-available/目录下。你需要添加或修改upstreamserver部分。

2.定义上游服务器组: 在配置文件中定义一个upstream块,列出所有后端服务器的地址和端口。例如:

bash 复制代码
upstream myapp {
    server backend1.example.com;
    server backend2.example.com;
    server backend3.example.com;
}

3.配置服务器块 :在server块中,使用location指令指定要代理的路径,并使用proxy_pass指令将请求转发到上游服务器组。例如:

java 复制代码
server {
    listen 80;

    location / {
        proxy_pass http://myapp;
        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-Proto $scheme;
        proxy_set_header Connection "";
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_read_timeout 86400;
    }
}

4.配置负载均衡策略 :Nginx支持多种负载均衡策略,如轮询(默认)、最少连接、IP哈希等。你可以通过upstream块中的least_connip_hash等指令来指定策略。

这里我给出轮询和最少连接这两种最常用负载均衡策略

轮询:

轮询是Nginx的默认负载均衡策略,它将请求轮流分配给后端服务器。

java 复制代码
http {
    upstream myapp {
        server backend1.example.com;
        server backend2.example.com;
        server backend3.example.com;
    }

    server {
        listen 80;

        location / {
            proxy_pass http://myapp;
            # 其他代理设置...
        }
    }
}

在这个配置中,upstream块定义了三个后端服务器,Nginx将自动使用轮询策略将请求分配给这些服务器。

最少连接:

最少连接策略会将请求分配给当前连接数最少的后端服务器。

java 复制代码
http {
    upstream myapp {
        least_conn;  # 指定使用最少连接策略
        server backend1.example.com;
        server backend2.example.com;
        server backend3.example.com;
    }

    server {
        listen 80;

        location / {
            proxy_pass http://myapp;
            # 其他代理设置...
        }
    }
}

upstream块中,通过添加least_conn;指令,指定了使用最少连接策略。这样,Nginx会优先选择当前活跃连接数最少的服务器来处理新的请求。

5.配置连接超时和缓冲 :根据需要配置proxy_read_timeoutproxy_send_timeoutproxy_buffer_size等参数。

6.配置SSL:如果需要HTTPS,还需要配置SSL证书和密钥。

7.测试配置 :在保存配置文件后,使用nginx -t命令测试配置文件是否有语法错误。

8.重启Nginx :如果测试通过,使用sudo systemctl restart nginxsudo service nginx restart命令重启Nginx以应用配置。

相关推荐
Linux运维技术栈1 小时前
Ansible(自动化运维)环境搭建及ansible-vault加密配置
运维·自动化·ansible
Bessssss2 小时前
centos权限大集合,覆盖多种权限类型,解惑权限后有“. + t s”问题!
linux·运维·centos
苹果醋32 小时前
Golang的文件加密工具
运维·vue.js·spring boot·nginx·课程设计
jwensh2 小时前
【Jenkins】Declarative和Scripted两种脚本模式有什么具体的区别
运维·前端·jenkins
大熊程序猿3 小时前
xxl-job docker 安装
运维·docker·容器
董健正4 小时前
centos制作离线安装包
linux·运维·centos
咏颜5 小时前
Ubuntu离线安装Docker容器
linux·运维·服务器·经验分享·ubuntu·docker
DexterLien5 小时前
Debian 12 安装配置 fail2ban 保护 SSH 访问
运维·debian·ssh·fail2ban
娶不到胡一菲的汪大东6 小时前
Shell脚本
linux·运维·ubuntu
xserver26 小时前
ensp 基于静态NAT发布公司网站服务器,
运维·服务器