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以应用配置。

相关推荐
Karoku0661 分钟前
【企业级分布式系统】ELK优化
运维·服务器·数据库·elk·elasticsearch
安迁岚1 小时前
【SQL Server】华中农业大学空间数据库实验报告 实验三 数据操作
运维·服务器·数据库·sql·mysql
打码人的日常分享1 小时前
商用密码应用安全性评估,密评整体方案,密评管理测评要求和指南,运维文档,软件项目安全设计相关文档合集(Word原件)
运维·安全·web安全·系统安全·规格说明书
追风赶月、2 小时前
【Linux】线程概念与线程控制
linux·运维·服务器
CP-DD3 小时前
Docker 容器化开发 应用
运维·docker·容器
努力的悟空4 小时前
国土变更调查拓扑错误自动化修复工具的研究
运维·自动化
周末不下雨5 小时前
win11+ubuntu22.04双系统 | 联想 24 y7000p | ubuntu 22.04 | 把ubuntu系统装到1T的移动固态硬盘上!!!
linux·运维·ubuntu
耗同学一米八6 小时前
2024 年河北省职业院校技能大赛网络建设与运维赛项样题四
运维·网络
_半夏曲6 小时前
node.js、nginx、iis、tomcat针对部署方面的简述
nginx·node.js·tomcat
东华果汁哥7 小时前
【linux 免密登录】快速设置kafka01、kafka02、kafka03 三台机器免密登录
linux·运维·服务器