Linux配置nginx反向代理

news2024/11/16 21:56:47

在云服务器上部署高并发的服务,使用Nginx作为反向代理是一种常见的做法,可以实现流量分发、负载均衡,同时提升系统的可靠性和性能。

步骤概览:
安装Nginx: 确保服务器已安装Nginx。若未安装,可使用适用于你服务器系统的包管理工具(如apt或yum)进行安装。

配置负载均衡: 利用Nginx的负载均衡功能,将请求分发到多个后端服务器。在配置文件中,通过定义upstream块列出多个后端服务器的地址。

upstream backend {
    server backend1.example.com;
    server backend2.example.com;
    server backend3.example.com;
}
然后在服务器配置中使用该upstream:

server {
    listen 80;
    server_name yourdomain.com;

    location / {
        proxy_pass http://backend;
    }
}
优化配置: 针对高并发场景,可以进一步优化Nginx的配置,包括:

调整worker_processes和worker_connections以最大程度利用服务器资源。
启用keepalive以减少连接的建立和关闭开销。
设置适当的缓冲区大小和超时值。
监控和日志: 在高并发情况下,监控Nginx的性能和请求情况非常重要。可以使用工具如Prometheus、Grafana等进行监控,并设置合适的日志记录,以便随时跟踪问题和分析性能。

安全性: 确保Nginx的配置和服务器都是安全的。禁用不必要的模块,设置合适的防火墙规则,使用SSL加密等。

详细步骤:
安装Nginx:

首先确保已经安装Nginx,可根据服务器系统使用对应的包管理工具安装,例如在Ubuntu上使用apt:

sudo apt update
sudo apt install nginx

配置反向代理:

编辑Nginx的站点配置文件:

sudo nano /etc/nginx/sites-available/my_service
在配置文件中添加反向代理设置,将请求代理到应用服务器的地址和端口号:

server {
    listen 8989;  # Nginx监听的端口号
    server_name 18.166.226.253;  # 服务器的IP地址或域名

    location / {
        proxy_pass http://127.0.0.1:16258;  # 替换为应用服务器的地址和端口号
        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;
    }
}

创建一个符号链接启用站点配置:
sudo ln -s /etc/nginx/sites-available/my_service /etc/nginx/sites-enabled/
检查Nginx配置文件是否有效:
sudo nginx -t

如果检查通过,重新加载Nginx的配置:
sudo systemctl reload nginx

启动应用服务:
如果你的应用服务是通过Python脚本运行的,可以创建一个systemd服务来管理它。创建一个.service文件,比如vits_app1.service,然后在其中指定应用程序的路径和所需的环境。然后启用和启动该服务:
sudo systemctl enable vits_app1  # 启用服务
sudo systemctl start

自行编译安装的 Nginx,而不是通过包管理器安装的版本。这可能会导致 systemd 在查找 Nginx 服务单元时出现问题。

 Nginx已经以新的配置启动。

常见错误和解决方法:
权限问题导致日志文件和临时文件夹无法创建:

错误信息:nginx: [alert] could not open error log file: open() "/usr/local/nginx/logs/error.log" failed (13: Permission denied)

解决方法:

确保 /usr/local/nginx/logs 目录及其文件的属主和权限设置正确。
使用以下命令进行设置:

sudo chown -R www-data:www-data /usr/local/nginx/logs
sudo chmod -R 755 /usr/local/nginx/logs
如果 error.log 和 access.log 文件不存在,可以创建它们并设置正确的权限:

sudo touch /usr/local/nginx/logs/error.log
sudo touch /usr/local/nginx/logs/access.log
sudo chown www-data:www-data /usr/local/nginx/logs/error.log
sudo chown www-data:www-data /usr/local/nginx/logs/access.log
sudo chmod 644 /usr/local/nginx/logs/error.log
sudo chmod 644 /usr/local/nginx/logs/access.log
最后,重新启动 Nginx 服务:

sudo /usr/local/nginx/sbin/nginx
端口 80 被占用:

错误信息:nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)

解决方法:

使用以下命令检查是否有其他进程在使用端口 80:

sudo lsof -i :80

停止占用80端口的Nginx进程:

sudo kill -9 83812

sudo kill -9 103115

重新启动Nginx,确保它绑定到8989端口:

sudo /usr/local/nginx/sbin/nginx


编辑文件路径错误导致保存失败:

错误信息:[ Error writing /etc/nginx/sites-available/my_service:wq: No such file or directory ]

解决方法:

确保在编辑文件时使用正确的编辑器命令和路径。
使用 :wq 命令保存文件时,确保文件路径正确,文件名正确且包含在 /etc/nginx/sites-available/ 目录中。
创建符号链接失败:

错误信息:ln: failed to create symbolic link '/etc/nginx/sites-enabled/': No such file or directory

解决方法:

使用以下命令创建 sites-enabled 目录:

sudo mkdir /etc/nginx/sites-enabled
然后再创建符号链接:

sudo ln -s /etc/nginx/sites-available/my_service /etc/nginx/sites-enabled/
最后,重新启动 Nginx 服务:

sudo systemctl restart nginx
找不到 Nginx 服务单元或命令:

错误信息:Failed to restart nginx.service: Unit nginx.service not found.

解决方法:

检查 Nginx 服务单元名称是否正确,不同的系统可能会有不同的单元名称。尝试使用以下命令重新启动 Nginx 服务:
对于使用 systemd 的系统(如 Ubuntu、Debian):

sudo systemctl restart nginx
对于使用 init.d 的系统(如 CentOS):

sudo service nginx restart
配置 Nginx 服务单元:
创建 systemd 配置文件 /etc/systemd/system/vits_app1.service:


sudo nano /etc/systemd/system/vits_app1.service
编辑并配置 /etc/systemd/system/vits_app1.service 文件,按照需求修改 Unit 和 Service 部分。

eg:

[Unit]
Description=VITS App 1
After=network.target

[Service]
Type=simple
ExecStart=/home/ubuntu/anaconda3/bin/python3 /home/ubuntu/vits/so-vits-svc/vits_app1.py
Restart=always
User=ubuntu

[Install]
WantedBy=multi-user.target

保存文件后,重新加载 systemd 配置并启动 Nginx 服务单元:


sudo systemctl daemon-reload
sudo systemctl start nginx
验证服务是否正常运行,查看日志:


sudo systemctl status vits_app1
sudo journalctl -u vits_app1
此外,记得确保 Python 脚本 vits_app1.py 是在系统启动时以 systemd 服务的方式在后台运行。

保存文件:

输入文件名:输入 /etc/nginx/sites-available/my_service 并按下 Enter 键。

保存文件:在编辑器中,通常你会按下某个键来保存文件,常见的方式是按下 Ctrl + S。如果没有特别的保存快捷键,你可以尝试 Ctrl + O 来执行 "Write Out" 操作,然后按下 Enter 键确认。

退出编辑器:保存文件后,你可以按下某个键来退出编辑器,常见的方式是按下 Ctrl + X。

如果你在使用 vim 编辑器,你可以按下 Esc 键来确保退出编辑模式,然后输入 :wq 并按下 Enter 键,这将保存文件并退出。

如果你使用的是其他编辑器,可能会有不同的操作步骤,但一般而言,你需要保存文件后退出编辑器。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/921836.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【c语言】文件操作 万字详解

目录 一,为什么使用文件 二,什么是文件 1,程序文件 2,数据文件 3,文件名 三,文件的打开和关闭 1,文件指针 2,文件的打开和关闭 四, 文件的顺序读写 1,顺序…

机器人制作开源方案 | 桌面级机械臂--本体说明+驱动及控制

一、本体说明 1. 机械臂整体描述 该桌面级机械臂为模块化设计,包含主机模块1个、转台模块1个、二级摆动模块1个、可编程示教盒1个、2种末端执行器、高清摄像头,以及适配器、组装工具、备用零件等。可将模块快速组合为一个带被动关节的串联3自由度机械臂…

用Python搭建个让你呼吸顺畅-ChatGPT

目录 ChatGPT使用时可能会遇到 1.请待命,我们正在检查您的浏览器... 2. 访问被拒绝。抱歉,您已被阻止 3. ChatGPT 目前已满负荷运转 4. 此内容可能违反我们的内容政策。 5.出了点问题。 6. 蹦字慢吞吞,卡顿不流畅,不知道的…

对称输出字符串(对称+递归)--夏令营

题目 tips: 1、巧思:类似于将输入的字符串按一个上一个下输出;所以可以用递归栈思考,第一个输入的直接输出,第二个存下来存进栈,如果没有字符串了,就可以输出第二个字符串,如果还有…

docker for window更改到非系统盘的使用记录

1、使用Hyper-v模式的docker安装 2、安装docker for windows后安装目录没办法自己选择,固定在c盘 卸载后通过命令行方式设置软连接方式后重新安装来让其安装到软连接的d盘,解决c盘空间问题 mklink /j "C:\Program Files\Docker" "D:\Pr…

制造执行系统(MES)在家具行业中的应用

制造执行系统(MES)在家具行业中有许多应用,它可以帮助家具制造商提高生产效率、质量控制和整体管理。以下是MES系统在家具行业中的一些应用领域: 1. 生产计划与调度:MES可以帮助家具制造商优化生产计划和调度&#xff…

php thinkphp 抖音支付,订单同步接口分享

1. 抖音支付 需要获取抖音小程序的AppID,AppSecret,需要配置回调地址,Token获取SALT 官方地址:支付,订单同步 以下干货仅针对于有一定开发基础的精英,0基础的止步。 public function DouyinPay($openId,$id,$body 抖音担保支付…

微服务中间件--分布式搜索ES

分布式搜索ES 11.分布式搜索 ESa.介绍ESb.IK分词器c.索引库操作 (类似于MYSQL的Table)d.查看、删除、修改 索引库e.文档操作 (类似MYSQL的数据)1) 添加文档2) 查看文档3) 删除文档4) 修改文档 f.RestClient操作索引库1) 创建索引库2) 删除索引库/判断索引库 g.RestClient操作文…

用户端Web自动化测试_L3

目录: 浏览器复用Cookie 复用pageobject设计模式异常自动截图测试用例流程设计电子商务产品实战 1.浏览器复用 复用浏览器简介 为什么要学习复用浏览器? 自动化测试过程中,存在人为介入场景提高调试UI自动化测试脚本效率 复用已有浏览…

13. Docker实战之安装MySQL

目录 1、前言 2、部署MySQL 2.1、Docker仓库查看镜像 2.2、拉取MySQL镜像 2.3、创建持久化目录 2.4、启动MySQL容器 2.5、查看宿主机上的MySQL目录 2.6、本地MySQL测试 2.7、新建MySQL用户,配置远程访问 2.8、本地Navicat连接测试 3、为什么数据库不适合D…

长胜证券:a股交易时间是几点到几点?

股票商场是一个高速工作的场所,关于新手出资者来说,他们可能不知道A股买卖的时刻是什么时分开始和完毕,这将给他们在买卖过程中带来一些麻烦。本文将从不同的角度来分析A股买卖时刻,帮助读者更好地了解A股买卖时刻的相关规定。 A股…

Talk | 香港中文大学张懿元:由MetaTransformer探索统一的多模态学习

本期为TechBeat人工智能社区第524期线上Talk! 北京时间8月23日(周三)20:00,香港中文大学博士生—张懿元的Talk已准时在TechBeat人工智能社区开播! 他与大家分享的主题是: “探索模态通用感知”,介绍了多模态学习和发展统一的多模态…

espidf vscode 安装出错ERROR_INVALID_PIP

解决链接:https://www.cnblogs.com/xiaohuzaixue/p/17558731.html 注意 不要使用win11的右键打开终端,在文件管理器上方输入cmd打开终端才有用。

数据结构——栈和队列OJ题

栈和队列小提升! 前言一、用队列实现栈队列接口实现(1)栈的接口定义(2)栈的初始化(3)入栈函数的定义(4)出栈函数的定义(5)查找栈顶元素&#xff0…

数据清洗——气温历史数据

import pandas as pd import numpy as np import matplotlib.pyplot as plt from pylab import mpl mpl.rcParams["font.sans-serif"] ["HarmonyOS Sans SC"] %matplotlib inline读取数据 data pd.read_excel("气温历史数据.xlsx") data.head…

【golang】for语句和switch语句

使用携带range子句的for语句时需要注意哪些细节? numbers1 : []int{1, 2, 3, 4, 5, 6} for i : range numbers1 {if i 3 {numbers1[i] | i} } fmt.Println(numbers1)这段代码执行后会打印出什么内容? 答案:[1 2 3 7 5 6] 当for语句被执行…

【面试题系列】(一)

Redis有哪些数据结构?其底层是怎么实现的? Redis 系列(一):深入了解 Redis 数据类型和底层数据结构 字符串(String): 用于存储文本或二进制数据。可以执行字符串的基本操作&#xf…

只需五分钟,了解kafka的环境搭建

〇、前言 在Kafka系列的上一篇文章中,我们介绍了Kafka的体系结构,那么本篇文章呢,我们就着手来把Kafka的运行环境搭建起来。 此处 ,我们采用线上环境普遍使用的ZooKeeper作为管理存储和管理kafka集群元数据,或者辅助…

更高效稳定 | 基于ACM32 MCU的编程直流电源应用方案

随着电子设备的多样化发展,面对不同的应用场景,需要采用特定的供电电源。因此,在电子产品的开发测试过程中,必不可少使用编程直流电源来提供测试电压,协助完成初步的开发测试过程。 编程直流电源概述 编程直流电源结构…

收单外包服务机构(第三方支付公司服务商)是什么?

收单外包服务机构(第三方支付公司服务商)是什么? 伴随着电子商务的迅速发展,越来越多的企业开始认识到收单外包服务机构的重要性。 收单外包是一个重要的服务机构,可以帮助企业解决许多与支付相关的问题。 收单外包服务…