Linux配置nginx反向代理
在云服务器上部署高并发的服务,使用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 键,这将保存文件并退出。
如果你使用的是其他编辑器,可能会有不同的操作步骤,但一般而言,你需要保存文件后退出编辑器。
相关文章:
Linux配置nginx反向代理
在云服务器上部署高并发的服务,使用Nginx作为反向代理是一种常见的做法,可以实现流量分发、负载均衡,同时提升系统的可靠性和性能。 步骤概览: 安装Nginx: 确保服务器已安装Nginx。若未安装,可使用适用于你…...
随便记录记录
统一整理一下各种 pandas读csv import pandas as pd ## 默认会将第一行作为列 df pd.read_csv(path_to_your_file.csv) ## 传递 headerNone 参数来告诉 Pandas 不要将第一行 df pd.read_csv(path_to_your_file.csv, headerNone) ## 使用多种选项来处理数据,如指…...
UbuntuDDE 23.04发布,体验DeepinV23的一个新选择
UbuntuDDE 23.04发布,体验DeepinV23的一个新选择 昨晚网上搜索了一圈,无意看到邮箱一条新闻,UbuntuDDE 23.04发布了 因为前几天刚用虚拟机安装过,所以麻溜的从网站下载了ISO文件,安装上看看。本来没多想,…...
RabbitMQ 消费者
RabbitMQ的消费模式分两种:推模式和拉模式,推模式采用Basic.Consume进行消费,拉模式则是调用Basic.Get进行消费。 消费者通过订阅队列从RabbitMQ中获取消息进行消费,为避免消息丢失可采用消费确认机制 消费者 拉模式拉模式的实…...
软件测试面试真题 | 什么是PO设计模式?
面试官问:UI自动化测试中有使用过设计模式吗?了解什么是PO设计模式吗? 考察点 《page object 设计模式》:PageObject设计模式的设计思想、设计原则 《web自动化测试实战》:结合PageObject在真实项目中的实践与应用情…...
GB2312转UTF-8部分中文乱码
现象 最近写了个txt导入,客户反馈有时候导入的数据,会出现个别中文乱码的现象,但是我之前已经做过编码转换处理了,统一转成了UTF-8。 比如“鞠婧祎”,导入进来是这样: 排查思路 首先看了一下这个文本的编码格式&am…...
项目——电子词典(客户端、服务器交互,字典导入,单词查询)
一、项目要求 登录注册功能,不能重复登录,重复注册单词查询功能历史记录功能,存储单词,意思,以及查询时间基于TCP,支持多客户端连接采用数据库保存用户信息与历史记录将dict.txt的数据导入到数据库中保存。…...
jenkins 是什么?
一、jenkins 是什么? Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具,起源于Hudson,主要用于持续、自动的构建/测试软件项目、监控外部任务的运行。Jenkins用Java语言编写,可在Tomcat等流行的servlet容器中运行&#…...
无涯教程-PHP - sql_regcase()函数
sql_regcase() - 语法 string sql_regcase (string string) 可以将sql_regcase()函数视为实用程序函数,它将输入参数字符串中的每个字符转换为包含两个字符的带括号的表达式。 sql_regcase() - 返回值 返回带括号的表达式字符串以及转换后的字符。 sql_regcase…...
cesium 实现鼠标中键拖动地图
cesium默认左键拖动地图,中键旋转,再绘图时带来诸多不便。所以改成鼠标中键按下拖动地图,鼠标左键选点。代码如下:【感谢chatGPT】 //改为中建拖动// 假设 viewer 是你的 Cesium Viewer 实例const cameraController viewer.scene…...
低压风机单片机方案
低压风机通常由电机、转子、机壳、进气管、出气管、齿轮和减速机等组成。电机带动转子旋转,旋转的转子带动齿轮和减速机转动,进而形成空气被吸入转子内部,通过旋转而产生的离心力把气体压缩,并将气体排出。 低压风机方案的主控型…...
R语言06-R语言的基本运算
概念 R语言支持多种基本运算,包括算术运算、逻辑运算、比较运算和向量化运算等。 代码示意 逻辑运算 a <- TRUE b <- FALSElogical_and <- a & b # 逻辑与 logical_or <- a | b # 逻辑或 logical_not <- !a # 逻辑非比较运算 x <…...
Docker容器:docker-compose管理创建LNMP服务并运行Wordpress网站平台
文章目录 一.项目环境1. 环境描述2.项目需求 二.部署过程1.安装Docker2.安装Docker加速器3.Docker-Compose安装部署4.准备依赖文件、配置nginx5.配置mysql6.配置php7.编写docker-compose.yml8.验证 三.容器快照,然后将Docker镜像打包成tar包备…...
实业兴国 守护种源 —— 白露木實®农业的活力之风
高科技领域,芯片是生命线;而在农业领域,种源与芯片在高科技领域的重要性是相同的。保护、发展、培育我国的种质资源,是中国农业发展至为关键的一环。但是,因为思想、观念、认识、技术等方面的原因,让我们错…...
Web3.0
一、Web3.0是什么 Web3.0(有时称为“分布式Web”或“去中心化Web”)是对互联网的下一代演进的概念。它代表了一种更加分散、去中心化和用户掌控的互联网模式,与传统的Web2.0模型有很大不同。 以下是Web3.0的一些关键特征和概念:…...
精密图纸被窃,知名手表品牌Seiko遭BlackCat勒索软件攻击
据BleepingComputer消息,日本著名手表制造商Seiko在7月末遭到了网络攻击,8月21日,BlackCat(又名ALPHV)勒索软件组织在其网站上宣布对这起攻击事件负责。 8 月 10 日,Seiko发布了一份数据泄露通知࿰…...
K8S如何部署Redis(单机、集群)
在今天的讨论中,我们将深入研究如何将Redis数据库迁移到云端,以便更好地利用云计算的优势提高数据管理的灵活性。 Redis(Remote Dictionary Server)是一个开源的、基于内存的数据结构存储系统,它可以用作数据库、缓存和消息代理。Redis支持多…...
Flask狼书笔记 | 03_模板
文章目录 3 模板3.1 模板基本使用3.2 模板结构组织3.3 模板进阶 3 模板 模板(template):包含固定内容和动态部分的可重用文件。Jinja2模板引擎可用于任何纯文本文件。 3.1 模板基本使用 HTML实体:https://dev.w3.org/html5/htm…...
MySQL 数据备份和数据恢复
目录 一、数据备份 1、概述 2、MySQLdump命令备份 1)备份单个数据库中的所有表 2) 备份数据中某个或多个表 3) 备份所有数据库 4)备份多个库 5) 只备份一个表或多个表结构 二、数据恢复 三、数据备份与恢复应用 一、数据备份 1、概述 数据备…...
软考高级系统架构设计师系列论文八十二:论软件的可维护性设计
软考高级系统架构设计师系列论文八十二:论软件的可维护性设计 一、摘要二、正文三、总结一、摘要 随着软件大型化,复杂化的发展,软件维护所耗费的资源越来越多,软件可维护性设计日益得到重视。我单位近几年开发综合业务 ATM交换机,用户对交换机的可维护性要求很高。我参加…...
Ompl初探
在/ompl-1.x.0/build/Release/bin下有很多生成的demo可执行文件 在终端执行 ./demo_Point2DPlanning 测试程序 #include <ompl/base/SpaceInformation.h> #include <ompl/base/spaces/SE3StateSpace.h> #include <ompl/base/StateSpace.h> #include <o…...
android sdk打包aar方案步骤
1.使用fat-aar库https://github.com/kezong/fat-aar-android/blob/master/README_CN.md 第一步:添加以下代码到你工程根目录下的build.gradle文件中: For Maven Central (The lastest release is available on Maven Central): buildscript {repositories {maven…...
Redis之bitmap类型解读
目录 基本介绍 基本命令 Setbit Getbit BITCOUNT 应用场景 统计当日活跃用户 用户签到 bitmap - Redis布隆过滤器 (应对缓存穿透问题) 基本介绍 Redis 的位图(bitmap)是由多个二进制位组成的数组,只有两…...
stm32之10.系统定时器
delay_s()延时秒 delay_ms()毫秒*1000 delay_us()微秒*1000000 微秒定时器代码 void delay_us(uint32_t n) { SysTick->CTRL 0; // Disable SysTick,关闭系统定时器 SysTick->LOAD SystemCoreClock/1000000*n-1; // 就是nus SysTick->LOAD Sys…...
PyTorch安装教程:从头开始配置PyTorch环境
PyTorch是一个开源的机器学习框架,广泛用于深度学习任务。要开始使用PyTorch,您需要在计算机上正确配置PyTorch环境。本文将为您提供一步步的指南,帮助您成功安装和配置PyTorch。 第一部分:安装Python和相关工具 第一步…...
Docker拉取并配置Grafana
Linux下安装Docker请参考:Linux安装Docker 安装准备 新建挂载目录 /opt/grafana/data目录,准备用来挂载放置grafana的数据 /opt/grafana/plugins目录,准备用来放置grafana的插件 /opt/grafana/config目录,准备用来挂载放置graf…...
Vue+Axios搭建二次元动态登录页面(mp4视频格式)
最近想做一个前端登录页面,背景好看的,格式中规中矩的,这么难?我自己创一个吧! 效果图如下: 源码可以参考我的github,复制源码即可用:gym02/loginPage_Vue: 使用VueAxios搭建的动态…...
【Kubernetes】K8S到底是什么,最近怎么这么火
前言 kubernetes,简称K8s,是用8代替名字中间的8个字符“ubernete”而成的缩写。是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kub…...
Java爬虫下载网页图片
在Java中,可以使用HttpURLConnection,Jsoup等库来实现网页爬取和图片下载。下面是一个基本的例子: 首先,需要添加Jsoup库到你的项目中。如果你使用Maven,可以在你的pom.xml文件中添加以下依赖: xml <…...
C语言之扫雷游戏实现篇
目录 主函数test.c 菜单函数 选择循环 扫雷游戏实现分析 整体思路 问题1 问题2 问题3 问题4 游戏函数(函数调用) 创建游戏盘数组mine 创建游戏盘数组show 初始化游戏盘数组InitBoard 展示游戏盘DisplayBoard 游戏盘置雷SetMine 游戏…...
初学者做动态网站项目例子/网盘搜索
区别:1,hashmap是无序的,treemap是有序的,整个key是按照自然顺序来的。2,hashmap可以put一个null当key ,treemap却不支持。3,底层结构不一样,一个是数组➕红黑树,一个直接就是红黑树。 但是has…...
灯具做外贸的网站有哪些/北京seo优化诊断
C#里巧用DateTime预设一些可选的日期范围(如本年度、本季度、本月等) 原文:C#里巧用DateTime预设一些可选的日期范围(如本年度、本季度、本月等)//大家在做报表或查询的时候都会有给用户预设一些可选的日期范围(如上图) //如本年度销售额、本季度利润、本月新增…...
如何制作自己的网站图?/360网站推广
我想没有人否认code review(代码评审、复查) 对提高代码质量的作用,如何进行code review? 这里确实存在一些方法和技巧以及理解和认识。方法不当,会浪费大量时间、造成低效率;流程过紧,会大大降低生产力&a…...
怎么建设手机网站/seo优化内容
给定一段时间内股票的每日售价(正16位整数)。 你可以选择在任何一天购买股票。 每次你选择购买时,当前的股票价格必须严格低于你之前购买股票时的价格。 编写一个程序,确定你应该在哪些天购进股票,可以使得你能够购…...
河北建设厅注册中心网站首页/企业如何建站
消息队列 RocketMQ 是阿里巴巴集团自主研发的专业消息中间件,基于高可用分布式集群技术,提供消息订阅和发布、消息轨迹查询以及定时(延时)消息、资源统计、监控报警等一系列消息云服务,是企业级互联网架构的核心产品。…...
企业为什么要建站/短视频剪辑培训班多少钱
LKJZ58-1-翻转单词顺序https://leetcode-cn.com/problems/fan-zhuan-dan-ci-shun-xu-lcof/双指针逐个翻转单词,最后再翻转整个字符串class Solution { public://双指针先逐个翻转单词,最后再翻转整个字符串string reverseWords(string s) {int k0;//k是补…...