Linux系统安装并配置nginx实现多服务同一端口

 

基本诉求是项目要实现并发,因为用了深度学习框架,tornado服务无法通过以下方式多进程开启服务,

http_server.bind(port)http_server.start(n)   #n为进程数

所以,寻求其它方式实现并发。服务是通过docker镜像提供的,在容器内容将服务复制一份,起多个服务实现并发,问题是这样多个服务api相同,但端口号不同,涉及到怎样向外只提供一个端口。因此学习使用nginx进行端口转发。

配置的机器可联网,有root权限,Ubuntu系统,整体过程还算简单,但中间也有一些坑,不过通过万能的度娘都解决了,特此记录。

配置nginx:

1.安装依赖

openssl   /   libssl-dev   /    gcc-c++

sudo apt-get install opensslsudo apt-get install libssl-dev
sudo apt-get install gcc-c++
sudo apt-get gcc build-essential
sudo apt-get zlib
sudo apt-get zlib-devel

 2.安装PCRE

下载安装包,命令行依次输入:

cd /usr/local/src/wget http://downloads.sourceforge.net/project/pcre/pcre/8.35/pcre-8.35.tar.gz

解压安装包,进入目录,编译安装,查看pcre版本

tar xzvf pcre-8.35.tar.gzcd pcre-8.35./configure                      #编译若出错检查依赖安装是否缺漏make & make install        pcre-config --version

3.安装nginx

下载安装包,命令行依次输入:

下载地址:https://nginx.org/en/download.html

cd /usr/local/src/wget http://nginx.org/download/nginx-1.6.2.tar.gz

解压安装包,进入目录,编译安装,启动nginx

tar xzvf nginx-1.6.2.tar.gzcd nginx-1.6.2./configure --prefix=/usr/local/src/nginx --with-http_ssl_module --with-http_stub_status_module                   #编译若出错检查依赖安装是否缺漏make & make install        进入/usr/local/src/nginx目录,
./nginx #启动nginx

 

 启动nginx时失败!!!

[root@party-0]#find / -type f -name *libpcre.so.*  #查看libpcre.so文件位置

  

[root@party-0]#ln -s /lib/x86_64-linux-gnu/libpcre.so.3.13.2 /lib/x86_64-linux-gnu/libpcre.so.1   #建立软链接

再重新启动就成功了。

查看nginx是否成功启动

[root@party-0]#ps -ef | grep nginx

4.配置nginx

cd /usr/local/src/nginx/conf    #进入配置文件目录目录
vim ngin.conf #打开配置文件

找到如图所示的位置,新增红框里的内容。

第一个红框:

upstream searchsvr{             #searchsvr 与第三个红框中的proxy_pass后名字一致    server 10.80.33.139:8999;   #ip为本地机器ip,端口是服务的端口,需要代理的端口都写在这里    server 10.80.33.139:7766;}

第二个红框中,修改端口号为向外提供的唯一端口。如上,对客户提供9000端口,代理内部服务的两个端口8999和7766.

第三个红框:

location /hot{    #/hot为服务的api    proxy_pass http://searchsvr;   #searchsvr与第一个红框中名字对应}

配置完成,重启nginx

cd /usr/local/src/ngin/sbin    #进入nginx目录./nginx -s reload              #重启nginx

完成!

 

 新手上车,内容若有错误造成误导,欢迎留言指正~

参考网址及其它问题解决方法网址:

runoob.com  NGINX安装配置教程:        https://www.runoob.com/linux/nginx-install-setup.html

nginx安装 :                        https://www.cnblogs.com/smfx13 安徽红色教育培训 www.tjganxun.cn 14/p/10546158.html

ubuntu使用yum命令报错解决方法:        https://blog.youkuaiyun.com/liuchang__/article/details/78485568

./nginx: error while loading shared libraries: libpcre.so.1: cannot open shared object file: No such启动nginx失败:https://blog.youkuaiyun.com/weixin_44297303/article/details/89505398

nginx启动失败               https://www.cnblogs.com/cnsanshao/p/3652510.html

                                        https://www.cnblogs.com/achengmu/p/9093814.html

                                        http://www.xwood.net/_site_domain_/_root/5870/5874/t_c278506.html

安装openssl-dev报错:https://blog.youkuaiyun.com/liujian8654562/article/details/101113461

 

 

<think>嗯,用户想在同一Linux系统中同时配置Nginx和HTTP服务。这个问题其实挺常见的,很多场景下需要让Nginx作为前端代理,后端再跑一个HTTP服务(比如Apache或另一个Nginx实例)。 从用户的问题描述来看,用户可能是个刚接触服务器配置的新手,因为ta没有具体说明要用什么HTTP服务。不过用户引用了好几篇Nginx配置的文章,说明ta已经做过一些功课了。用户可能真正想要的是:如何让Nginx和其他Web服务共存,特别是当端口冲突时该怎么处理。 考虑到用户引用的资料里提到端口配置和反向代理,核心解决方案应该是让Nginx监听80端口作为入口,然后把请求转发到后端HTTP服务的其他端口(比如8080)。这样能避免端口冲突,也符合生产环境的常见做法。 用户可能遇到的实际困难包括: - 如何修改Nginx配置做反向代理 - 如何调整SELinux和防火墙设置 - 如何确保两个服务能同时启动 需要特别注意提醒用户权限问题(比如非root用户不能绑定1024以下端口)和配置文件的语法校验,这些地方容易出错。另外用户引用的资料里反复提到测试访问的步骤,说明ta可能比较关心验证方法,所以回复里要包含具体的curl测试命令。 安全方面得强调防火墙配置,很多新手会忘记这个。性能方面可以提一嘴worker_processes和worker_connections的优化,但不用展开,毕竟用户主要问的是基础配置。 最后生成的三个问题都围绕进阶应用:负载均衡是反向代理的延伸,HTTPS是实际部署的刚需,日志分析则是运维必备技能。这样既解决了当前问题,又给用户留了继续探索的路径。</think>在同一Linux系统中同时配置Nginx和HTTP服务(通常指Apache或其他Web服务)的核心思路是**端口分配**和**反向代理**。以下是详细步骤和注意事项: --- ### **一、规划服务端口** 为避免端口冲突(默认HTTP服务都监听80端口),需分配不同端口: 1. **Nginx**:作为前端代理,监听默认的 `80` (HTTP) 或 `443` (HTTPS) 2. **后端HTTP服务**(如Apache/Tomcat):监听其他端口(例如 `8080`) --- ### **二、配置后端HTTP服务(以Apache为例)** 1. **修改Apache监听端口** ```bash sudo vim /etc/apache2/ports.conf # Debian/Ubuntu # 或 sudo vim /etc/httpd/conf/httpd.conf # CentOS/RHEL ``` 将 `Listen 80` 改为 `Listen 8080`。 2. **修改虚拟主机配置** 在站点配置文件中将 `<VirtualHost *:80>` 改为 `<VirtualHost *:8080>`。 3. **重启Apache** ```bash sudo systemctl restart apache2 # Debian/Ubuntu sudo systemctl restart httpd # CentOS/RHEL ``` --- ### **三、配置Nginx反向代理** 将Nginx作为前端,将请求转发至后端服务: 1. **编辑Nginx配置文件** ```bash sudo vim /etc/nginx/conf.d/reverse-proxy.conf ``` 2. **添加反向代理规则** ```nginx server { listen 80; server_name your-domain.com; # 替换为你的域名或IP location / { proxy_pass http://localhost:8080; # 转发到Apache proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } ``` 3. **检查配置重启Nginx** ```bash sudo nginx -t # 验证配置语法 sudo systemctl restart nginx ``` --- ### **四、关键配置调整** 1. **防火墙放行端口** ```bash sudo firewall-cmd --permanent --add-port={80,8080}/tcp # firewalld (CentOS) sudo ufw allow 80/tcp && sudo ufw allow 8080/tcp # ufw (Ubuntu) sudo firewall-cmd --reload ``` 2. **SELinux策略调整(如启用)** ```bash sudo setsebool -P httpd_can_network_connect 1 # 允许HTTP服务网络连接 ``` 3. **端口冲突检查** ```bash sudo ss -tulnp | grep -E '80|8080' # 确认端口占用情况 ``` --- ### **五、验证服务** 1. **直接访问后端服务** ```bash curl http://localhost:8080 # 应返回Apache默认页 ``` 2. **通过Nginx访问** ```bash curl http://localhost # 应返回Apache内容(通过Nginx代理) ``` --- ### **注意事项** 1. **性能优化** - Nginx的 `worker_processes` 建议设为CPU核心数[^4]。 - 调整 `worker_connections` 控制发连接数(例如 `worker_connections 1024;`)。 2. **日志定位问题** - Nginx日志:`/var/log/nginx/access.log` 和 `error.log` - Apache日志:`/var/log/apache2/access.log`(Ubuntu)或 `/var/log/httpd/access_log`(CentOS) 3. **静态资源处理** 若需Nginx直接处理静态文件,可添加配置: ```nginx location /static/ { root /var/www/html; # 静态文件路径 expires 30d; # 缓存设置 } ``` > **故障排查提示**:若访问失败,按顺序检查: > ① 服务状态(`systemctl status nginx/apache2`)→ ② 端口监听(`ss -tulnp`)→ ③ 防火墙/SELinux → ④ 代理配置路径。 --- ### **应用场景** 此方案适用于: - 用Nginx处理静态资源 + Apache运行动态脚本(如PHP) - 灰度发布(Nginx分流部分流量到新服务) - 负载均衡扩展后端服务[^1] ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值