Nginx(项目管理和LINUX)

2024-08-23 10:12
文章标签 linux 项目管理 nginx

本文主要是介绍Nginx(项目管理和LINUX),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

一、反向代理

配置反向代理的基本步骤

示例配置

二、安装和配置

(一)Nginx的安装

1. 安装依赖项

2. 下载Nginx安装包

3. 解压安装包

4. 编译和安装

(二)Nginx的配置

1. 配置文件位置

2. 配置文件结构

3. 配置示例

三、虚拟主机配置

1. 基于域名的虚拟主机

2. 基于IP地址的虚拟主机

3. 基于端口的虚拟主机

注意事项

四、负载均衡

(一)负载均衡的基本概念

(二)Nginx负载均衡的实现方式

(三)Nginx负载均衡的算法

(四)Nginx负载均衡的配置

(五)Nginx负载均衡的注意事项

五、Http协议代理

(一)正向代理

(二)反向代理

(三)注意事项


一、反向代理

Nginx中的反向代理是一种常用的网络架构模式,它允许Nginx服务器作为客户端(如Web浏览器)和一组后端服务器(如Web服务器、应用服务器等)之间的中介。当客户端发起请求时,Nginx会接收这些请求,然后根据其配置将请求转发给后端服务器中的一个或多个。后端服务器处理请求后,将响应返回给Nginx,Nginx再将响应转发回客户端。这种架构模式带来了多种好处,包括负载均衡、缓存、安全性增强和隐藏后端服务器的直接暴露等。

配置反向代理的基本步骤

  1. 安装Nginx:首先,你需要在你的服务器上安装Nginx。这通常可以通过包管理器(如apt-get、yum、dnf等)来完成。

  2. 编辑Nginx配置文件:Nginx的配置文件通常位于/etc/nginx/nginx.conf,或者你可以通过包含其他文件来组织配置(例如,在/etc/nginx/sites-available/目录下的文件,并通过符号链接到/etc/nginx/sites-enabled/来启用)。

  3. 设置server块:在Nginx配置文件中,你需要设置一个或多个server块来定义反向代理的规则。每个server块都可以包含多个location块,这些location块用于匹配请求的URI,并指定如何处理这些请求。

  4. 配置proxy_pass:在location块中,使用proxy_pass指令来指定请求应该被转发到的后端服务器的URL。例如,proxy_pass http://backend;会将所有匹配该location的请求转发到名为backend的upstream组(这需要在配置文件中另外定义)或指定的URL。

  5. 其他代理设置(可选):根据你的需求,你可能还需要配置其他与代理相关的指令,如proxy_set_header(用于设置转发给后端服务器的请求头)、proxy_read_timeout(设置读取后端服务器响应的超时时间)等。

  6. 重新加载Nginx配置:在修改Nginx配置文件后,你需要重新加载Nginx以使更改生效。这通常可以通过运行nginx -s reload命令来完成。

示例配置

以下是一个简单的Nginx反向代理配置示例,它将所有到Nginx服务器的HTTP请求转发到后端服务器192.168.1.100的8080端口:

server {  listen 80;  server_name example.com;  location / {  proxy_pass http://192.168.1.100:8080;  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指令用于确保后端服务器能够接收到关于原始请求的一些重要信息,如客户端的IP地址和请求是通过HTTP还是HTTPS发送的。

二、安装和配置

Nginx的安装和配置过程可以根据具体的操作系统和需求有所不同,但通常包括以下几个主要步骤:

(一)Nginx的安装

1. 安装依赖项

在安装Nginx之前,通常需要安装一些依赖项,如gcc、pcre、zlib、openssl等。这些依赖项可以通过系统的包管理器来安装。例如,在基于RPM的系统中(如CentOS、Fedora等),可以使用yum命令来安装这些依赖项:

yum install gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel

在基于Debian的系统中(如Ubuntu、Debian等),可以使用apt命令来安装:

apt-get update 
apt-get install build-essential libpcre3 libpcre3-dev zlib1g-dev openssl libssl-dev

2. 下载Nginx安装包

从Nginx的官方网站(nginx.org)下载最新版本的Nginx安装包。通常,这是一个.tar.gz格式的压缩包。

3. 解压安装包

将下载的Nginx安装包解压到指定的目录。例如,可以将其解压到/usr/local/src目录下:

cd /usr/local/src  
tar -zxvf nginx-xxx.tar.gz

其中,nginx-xxx.tar.gz是下载的Nginx安装包的名称,xxx代表版本号。

4. 编译和安装

进入Nginx的解压目录,执行编译和安装命令。在编译过程中,可以通过./configure脚本来指定安装选项,如安装路径、模块等。

cd nginx-xxx  
./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module  
make  
make install

其中,--prefix选项指定了Nginx的安装目录,--with-http_ssl_module--with-http_stub_status_module是启用SSL支持和状态监控模块的编译选项。

(二)Nginx的配置

1. 配置文件位置

Nginx的主配置文件通常位于/etc/nginx/nginx.conf/usr/local/nginx/conf/nginx.conf(取决于安装方式和安装路径)。此外,Nginx还支持通过include指令包含其他配置文件,以实现更灵活的配置。

2. 配置文件结构

Nginx的配置文件由多个块(block)组成,每个块包含一系列指令,用于控制Nginx的行为。主要的块包括全局块(global)、events块、http块、server块和location块。

  • 全局块:包含影响Nginx全局运行的指令,如worker_processes、user等。
  • events块:包含影响Nginx服务器或与用户的网络连接的指令,如worker_connections等。
  • http块:包含HTTP服务器相关的指令,如server块。
  • server块:定义了一个虚拟服务器的配置,可以包含多个location块。
  • location块:用于匹配请求的URI,并定义如何处理这些请求。
3. 配置示例

以下是一个简单的Nginx配置文件示例,它定义了一个监听80端口的服务器,并将所有请求转发到后端服务器:

 

user nginx;  
worker_processes auto;  
error_log /var/log/nginx/error.log;  
pid /run/nginx.pid;  events {  worker_connections 1024;  
}  http {  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            on;  tcp_nopush          on;  tcp_nodelay         on;  keepalive_timeout   65;  types_hash_max_size 2048;  include             /etc/nginx/mime.types;  default_type        application/octet-stream;  # Load modular configuration files from the /etc/nginx/conf.d directory.  # See http://nginx.org/en/docs/ngx_core_module.html#include  # for more information.  include /etc/nginx/conf.d/*.conf;  server {  listen       80;  server_name  localhost;  location / {  proxy_pass http://backend_server;

三、虚拟主机配置

Nginx中的虚拟主机配置是一个灵活且强大的功能,它允许在单个Nginx服务器上托管多个网站或服务。Nginx支持多种类型的虚拟主机配置,主要包括基于域名的虚拟主机、基于IP地址的虚拟主机和基于端口的虚拟主机。以下是这三种类型虚拟主机配置的基本步骤和要点:

1. 基于域名的虚拟主机

基于域名的虚拟主机是最常用的配置方式,它使用不同的域名来区分不同的网站。

配置步骤

  1. 确保DNS设置正确:首先,需要确保DNS服务器已经正确配置,将不同的域名解析到服务器的IP地址。

  2. 编辑Nginx配置文件:编辑Nginx的主配置文件(通常是nginx.conf),或者在一个单独的配置文件中定义虚拟主机,并通过include指令在主配置文件中引入。

  3. 定义server块:为每个虚拟主机定义一个server块,使用server_name指令指定域名,使用listen指令(默认为80端口)指定监听端口。

  4. 设置根目录和索引文件:在server块内,使用root指令设置网站的根目录,使用index指令指定默认索引文件。

  5. 配置location块:根据需要配置location块,以处理不同的URL请求。

  6. 测试并重新加载配置:使用nginx -t命令测试配置文件是否有语法错误,然后使用nginx -s reload命令重新加载Nginx以应用更改。

2. 基于IP地址的虚拟主机

基于IP地址的虚拟主机通过在服务器上配置多个IP地址,并使用这些IP地址来区分不同的虚拟主机。

配置步骤

  1. 配置网络接口:在服务器上配置网络接口,为其分配多个IP地址。这可以通过编辑网络配置文件或使用命令行工具(如ifconfigip addr addnmcli)来完成。

  2. 编辑Nginx配置文件:为每个IP地址定义一个server块,在listen指令中指定相应的IP地址和端口(如果端口不是80,则需要指定)。

  3. 设置根目录和索引文件:为每个虚拟主机设置根目录和索引文件。

  4. 测试并重新加载配置:同上。

3. 基于端口的虚拟主机

基于端口的虚拟主机使用相同的IP地址但不同的端口号来区分不同的虚拟主机。

配置步骤

  1. 编辑Nginx配置文件:为每个虚拟主机定义一个server块,在listen指令中指定相同的IP地址但不同的端口号。

  2. 设置根目录和索引文件:为每个虚拟主机设置根目录和索引文件。

  3. 配置location块:根据需要配置。

  4. 测试并重新加载配置:同上。

注意事项

  • 在配置虚拟主机时,请确保不要将多个server块配置为监听相同的IP地址和端口组合,这会导致冲突。
  • 配置文件中的路径、域名和端口号等信息需要根据实际情况进行修改。
  • 在修改配置文件后,务必使用nginx -t命令测试配置文件的语法是否正确,然后再重新加载Nginx配置。
  • 如果使用的是基于域名的虚拟主机,请确保DNS设置正确无误,以便客户端能够正确解析域名并访问到对应的虚拟主机。

四、负载均衡

Nginx中的负载均衡是一种关键技术,用于将客户端的请求根据特定的算法分发到后端的多台服务器上,以提高系统的并发处理能力和稳定性。以下是Nginx中负载均衡的详细解析:

(一)负载均衡的基本概念

负载均衡是指通过一定的算法和策略,将网络请求或数据流量分散到多个服务器上,以确保系统的负载均衡,从而提高系统的响应速度、吞吐量和可靠性。Nginx作为一个高性能的HTTP和反向代理服务器,提供了强大的负载均衡功能。

(二)Nginx负载均衡的实现方式

Nginx通过其内置的upstream模块来实现负载均衡。upstream模块定义了一个服务器组,其中包含了一个或多个后端服务器的地址和端口。当客户端发起请求时,Nginx会根据一定的算法从服务器组中选择一台服务器来处理该请求。

(三)Nginx负载均衡的算法

Nginx支持多种负载均衡算法,以下是几种常用的算法:

  1. 轮询(Round Robin)
    • 默认算法,将请求按顺序轮流分配到后端服务器上。
    • 如果后端服务器的处理能力不同,可能会导致某些服务器过载而另一些服务器空闲。
  2. 权重(Weighted Round Robin)
    • 在轮询的基础上,为每台服务器分配一个权重值,权重值越高的服务器将接收到更多的请求。
    • 适用于后端服务器性能不均等的情况,通过调整权重值来实现负载均衡。
  3. 最少连接(Least Connections)
    • 将新的请求分配给当前连接数最少的服务器。
    • 适用于后端服务器处理请求的时间长短不一的情况,可以更有效地利用服务器资源。
  4. IP哈希(IP Hash)
    • 根据客户端的IP地址计算哈希值,然后将请求分配给具有相同哈希值的服务器。
    • 可以确保来自同一个客户端的请求始终被发送到同一台服务器上,从而保持会话的连续性。
    • 需要注意的是,IP哈希算法在Nginx 1.3版本之后才支持,并且不能与backup指令同时使用。
  5. 第三方策略
    • Nginx还支持通过安装第三方插件来实现更复杂的负载均衡策略,如upstream_fair插件可以根据服务器的响应时间来分配请求。

(四)Nginx负载均衡的配置

Nginx负载均衡的配置主要在nginx.conf文件中的upstream模块和server块中进行。以下是一个简单的配置示例:

http {  upstream myapp1 {  server srv1.example.com weight=3;  server srv2.example.com;  server srv3.example.com;  # 可以指定负载均衡算法,如least_conn、ip_hash等  # least_conn;  # ip_hash;  }  server {  listen 80;  location / {  proxy_pass http://myapp1;  # 其他相关配置...  }  }  
}

在上述示例中,upstream模块定义了一个名为myapp1的服务器组,包含了三台后端服务器(srv1、srv2、srv3),其中srv1的权重被设置为3,表示它将接收到比其他服务器更多的请求。在server块中,通过proxy_pass指令将请求转发到myapp1服务器组进行处理。

(五)Nginx负载均衡的注意事项

  1. 服务器健康检查
    • Nginx提供了健康检查功能,可以定期检查后端服务器的健康状态,并自动将不健康的服务器从服务器组中移除,以避免将请求发送到不可用的服务器上。
  2. 会话保持
    • 在使用IP哈希算法时,需要确保客户端的IP地址在请求过程中保持不变,否则可能会导致会话中断。
  3. 负载均衡算法的选择
    • 应根据实际应用场景和需求选择合适的负载均衡算法,以达到最佳的负载均衡效果。
  4. 性能监控和优化
    • 定期对Nginx和后端服务器的性能进行监控和分析,根据监控结果进行相应的优化和调整。

五、Http协议代理

Nginx中的HTTP协议代理主要涉及到Nginx作为正向代理或反向代理服务器,来处理HTTP协议的请求和响应。以下是对Nginx中HTTP协议代理的详细解析:

(一)正向代理

1. 定义与作用

  • 定义:正向代理是位于客户端和目标服务器之间的代理服务器,代表客户端向目标服务器发送请求。客户端将请求发送给代理服务器,然后代理服务器将请求转发给目标服务器,并将响应返回给客户端。
  • 作用:隐藏客户端的真实IP地址,访问受限网站、保护客户端隐私、提高访问速度等。

2. 配置示例

Nginx原生支持HTTP协议的正向代理,但默认配置可能不支持HTTPS协议的正向代理。对于HTTPS协议的正向代理,需要借助第三方模块如ngx_http_proxy_connect_module来实现。

  • 基本配置:在Nginx的配置文件中(通常是nginx.conf或包含的文件),可以设置一个server块来监听特定的端口(如8080),并配置proxy_pass指令来指定目标服务器的地址。
  • HTTPS支持:如果需要支持HTTPS协议的正向代理,需要安装并配置ngx_http_proxy_connect_module模块,并在配置文件中启用proxy_connect指令。

(二)反向代理

1. 定义与作用

  • 定义:反向代理是位于目标服务器和客户端之间的代理服务器,代表目标服务器向客户端返回响应。客户端发送请求给反向代理,反向代理根据配置将请求转发给相应的目标服务器,然后将目标服务器的响应返回给客户端。
  • 作用:负载均衡、安全防护、缓存加速、隐藏服务器真实IP地址等。

2. 配置示例

Nginx作为反向代理服务器时,通常会在配置文件中设置多个server块,每个server块监听不同的域名或端口,并通过proxy_pass指令将请求转发到后端服务器。

  • 基本配置:在server块中,使用listen指令指定监听的端口和协议(默认为HTTP),使用server_name指令指定域名,然后在location块中使用proxy_pass指令指定后端服务器的地址。
  • 负载均衡:Nginx支持多种负载均衡算法,如轮询、权重、最少连接等。可以在upstream模块中定义一组后端服务器,并在server块中使用proxy_pass指令引用这个服务器组,Nginx会自动根据配置的算法将请求分发到后端服务器上。

(三)注意事项

  • 安全性:在使用Nginx作为代理服务器时,需要注意安全性问题,如防止SQL注入、跨站脚本攻击等。
  • 性能优化:根据实际需求调整Nginx的配置参数,如缓存设置、连接超时时间等,以提高系统的性能和稳定性。
  • 版本兼容性:确保Nginx的版本与后端服务器的版本兼容,以避免出现不兼容的问题。

综上所述,Nginx中的HTTP协议代理包括正向代理和反向代理两种模式,每种模式都有其特定的应用场景和配置方法。在实际应用中,需要根据具体需求选择合适的代理模式和配置参数。


 文章制作不易,如果有帮助的话,还希望能给个点赞关注支持一下,谢谢大家!🙏🙏🙏

这篇关于Nginx(项目管理和LINUX)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1099095

相关文章

linux-基础知识3

打包和压缩 zip 安装zip软件包 yum -y install zip unzip 压缩打包命令: zip -q -r -d -u 压缩包文件名 目录和文件名列表 -q:不显示命令执行过程-r:递归处理,打包各级子目录和文件-u:把文件增加/替换到压缩包中-d:从压缩包中删除指定的文件 解压:unzip 压缩包名 打包文件 把压缩包从服务器下载到本地 把压缩包上传到服务器(zip

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

Linux_kernel驱动开发11

一、改回nfs方式挂载根文件系统         在产品将要上线之前,需要制作不同类型格式的根文件系统         在产品研发阶段,我们还是需要使用nfs的方式挂载根文件系统         优点:可以直接在上位机中修改文件系统内容,延长EMMC的寿命         【1】重启上位机nfs服务         sudo service nfs-kernel-server resta

【Linux 从基础到进阶】Ansible自动化运维工具使用

Ansible自动化运维工具使用 Ansible 是一款开源的自动化运维工具,采用无代理架构(agentless),基于 SSH 连接进行管理,具有简单易用、灵活强大、可扩展性高等特点。它广泛用于服务器管理、应用部署、配置管理等任务。本文将介绍 Ansible 的安装、基本使用方法及一些实际运维场景中的应用,旨在帮助运维人员快速上手并熟练运用 Ansible。 1. Ansible的核心概念

Linux服务器Java启动脚本

Linux服务器Java启动脚本 1、初版2、优化版本3、常用脚本仓库 本文章介绍了如何在Linux服务器上执行Java并启动jar包, 通常我们会使用nohup直接启动,但是还是需要手动停止然后再次启动, 那如何更优雅的在服务器上启动jar包呢,让我们一起探讨一下吧。 1、初版 第一个版本是常用的做法,直接使用nohup后台启动jar包, 并将日志输出到当前文件夹n

[Linux]:进程(下)

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:Linux学习 贝蒂的主页:Betty’s blog 1. 进程终止 1.1 进程退出的场景 进程退出只有以下三种情况: 代码运行完毕,结果正确。代码运行完毕,结果不正确。代码异常终止(进程崩溃)。 1.2 进程退出码 在编程中,我们通常认为main函数是代码的入口,但实际上它只是用户级

【Linux】应用层http协议

一、HTTP协议 1.1 简要介绍一下HTTP        我们在网络的应用层中可以自己定义协议,但是,已经有大佬定义了一些现成的,非常好用的应用层协议,供我们直接使用,HTTP(超文本传输协议)就是其中之一。        在互联网世界中,HTTP(超文本传输协议)是一个至关重要的协议,他定义了客户端(如浏览器)与服务器之间如何进行通信,以交换或者传输超文本(比如HTML文档)。

如何编写Linux PCIe设备驱动器 之二

如何编写Linux PCIe设备驱动器 之二 功能(capability)集功能(capability)APIs通过pci_bus_read_config完成功能存取功能APIs参数pos常量值PCI功能结构 PCI功能IDMSI功能电源功率管理功能 功能(capability)集 功能(capability)APIs int pcie_capability_read_wo