`

nginx + apache 做端口转发

 
阅读更多
    最近公司需要搭建一个内容管理系统,用的框架是dedecms,没有多考虑,首选的就是apache,因为公司的服务器是centos,所以一通折腾之后安装好了apache,php,以及各种模块及依赖库。
    在安装好之后启动apache,发现无法启动,说是80端口被占用,经过netstat -anp | grep 80 之后发现是ngnix占用了该端口。因为这台服务器一直在使用nginx + unicorn 来跑rails项目,所以这个nginx是万万不能停掉的,怎么办?
    1、修改apache启动时的默认端口,找到apache的配置文件(httpd.conf),将Listen 80 改为 Listen 8080 保存退出,然后重启apache,这个时候发现apache已经启动了,ok,到此为止,端口冲突问题解决了
    2、接下来,访问项目目录:117.79.111.xx:8080,你会发现无法访问到apache的跟路径。
    3、配置防火墙,让8080可以让外网进行访问。打开防火墙配置文件/etc/sysconfig/iptables,在这个文件里面你会发现一个关于80端口的配置:-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT  这个是服务器开启的默认端口,允许外网进行访问的,那么如果我们想让8080端口允许外网访问的话,那么我们就在这一句的下面加上-A INPUT -p tcp -m tcp --dport 8080 -j ACCEPT,保存退出,然后重启防火墙,这个时候我们在通过117.79.111.xx:8080来访问的话,你会发现已经可以访问apache根路径了,如果反问我们的项目的话,我们要加入项目路径(比如说是dedecms),那么我们就要这样117.79.111.xx:8080/dedecms。
    4、我们发现每次访问项目的话,都要使用ip加端口,再加项目目录的形式才能访问,这无疑是危险的,并且是很傻的,接下来我们配置apache文件,使用域名代替ip来实现项目的访问,如下:找到apache配置文件httpd.conf,在文件的最后添加一下内容
<VirtualHost *:8080>
  ServerName   cms.xxx.com
  DocumentRoot /var/www/dedecms
  <Directory />
    Options FollowSymLinks
    AllowOverride None
  </Directory>
  <Directory /var/www/dedecms>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride None
    Order allow,deny
    allow from all
  </Directory>

  ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
  <Directory "/usr/lib/cgi-bin">
    AllowOverride None
    Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
    Order allow,deny
    Allow from all
  </Directory>
  ErrorLog ${APACHE_LOG_DIR}/zuzher_cms_error.log
  # Possible values include: debug, info, notice, warn, error, crit,
  # alert, emerg.
  LogLevel warn
  CustomLog ${APACHE_LOG_DIR}/access.log combined
  Alias /doc/ "/usr/share/doc/"
  <Directory "/usr/share/doc/">
    Options Indexes MultiViews FollowSymLinks
    AllowOverride None
    Order deny,allow
    Deny from all
  </Directory>
</VirtualHost>


    保存退出,然后重启apache,访问 http://cms.xxx.com:8080,你会发现我们的项目已经可以通过域名来访问了。
    5、虽然到上面为止我们可以通过域名正确的访问项目了,但是问题是,我们每次都要输入8080的端口号才能正确访问,这个着实不爽,要怎么办呢。还记得我刚开始说的,项目中有用nginx + unicorn 来跑rails么,只不过那样是使用nginx 做前端,unicorn做后端,然后通过代理的形式实现nginx 和unicorn之间的通讯。既然unicorn可以,那么apache一定也是可以的,接下来我们就用nginx 做前端,apache做后端,来实现这个端口转发的功能。上面的apache配置文件保持不动,接下来我们编辑nginx配置文件/usl/local/nginx/conf/nginx.conf
http {
    include       mime.types;
    default_type  application/octet-stream;


    sendfile        on;

    keepalive_timeout  65;


    upstream app1_server {

      server unix:/home/naitnix/workspace/app1/tmp/sockets/unicorn.sock fail_timeout=0;

    }

    upstream cms_server{
      server 117.79.111.xx:8080;
    }


    include       /usr/local/nginx/conf/services/app1.conf;
    include       /usr/local/nginx/conf/services/cms.conf;
    
}



    上面的app1_server是我们的rails项目,cms_server是我们现在要做的cms的配置。这里我们指定我们服务器的地址和端口号。然后你可以看见我include了两个项目的配置文件,这是为了方便项目管理,我新建了一个servers目录,所有的项目配置信息都放到了这个里面。其中app1.conf是我们的rails的项目配置文件,而cms.conf则是我们这个cms项目要用到的,接下来我们进入这个cms文件,来编辑里面的内容:
    server {
        listen       80;
        server_name  cms.xxx.com;
    
        location / {

          proxy_redirect off;

          proxy_set_header Host $host;

          proxy_set_header X-Forwarded-Host $host;

          proxy_set_header X-Forwarded-Server $host;

          proxy_set_header X-Real-IP $remote_addr;

          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

          proxy_buffering on;

          proxy_pass http://cms_server;#这里指定上面的cms_server de upstream

        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

    }



    保存,并重启nginx,然后我们访问我们的cms.xxx.com,这个时候你会发现我们不用输入8080端口号就可以访问我们的项目了。这样nginx将请求转发到apache 的8080端口来实现我们访问8080端口的目的。
    以上写的比较草率,很多细节地方我没有提到,希望能给各位提供帮助,也希望各位能提宝贵意见,谢谢。
    参考文章:
    http://www.sqlstudy.com/article/nginx-proxy-apache-configure.html
    http://www.imhdr.com/nginx/to-configure-nginx-front-end-apache-backend-server/
    http://wiki.octopusinfo.com/index.php/Linux%E6%8A%80%E5%B7%A7:%E7%BD%91%E7%AB%99%E7%AF%87:Nginx_%E8%BD%AC%E5%8F%91%E8%87%B3_Apache
分享到:
评论

相关推荐

    nginx+apache+mysql+php+memcached+squid搭建门户网站

    ### Nginx+Apache+MySQL+PHP+Memcached+Squid 搭建门户网站 #### 一、前言与架构概述 随着互联网技术的发展,如何构建一个高效、稳定且能够应对高并发访问的Web服务器成为了许多企业和开发者关注的重点。本文将...

    Nginx+Apache负载均衡

    - **Nginx 负责负载均衡**:根据预设规则将请求转发给后端的真实服务器(如 Apache 服务器)。常见的负载均衡策略包括轮询(默认)、最少连接数、IP 哈希等。 - **响应返回给用户**:真实服务器处理完请求后,将响应...

    Nginx+keepalived+tomcat实现性负载均衡(包含需要的包)

    在本场景中,Tomcat作为实际处理业务逻辑的应用服务器,接收到Nginx转发过来的请求,执行相应的Java代码并返回结果。多台Tomcat可以通过Nginx的负载均衡策略协同工作,提高整体处理能力。 在实际部署过程中,你需要...

    Windows+Nginx+Tomcat做负载均衡同时实现session共享Demo

    在Nginx的配置文件中,我们可以定义一个upstream模块,列出所有Tomcat服务器的IP和端口,并选择合适的策略进行分配。例如: ```nginx upstream tomcat_cluster { server 192.168.1.101:8080; server 192.168.1....

    Nginx+Tomcat+Redis搭建均衡负载集群

    每个Tomcat实例应配置不同的监听端口,以便Nginx可以区分并分发请求。 对于Redis,需要在所有相关服务器上安装并配置。为了实现高可用性,可以采用主从复制或者哨兵(Sentinel)系统来监控和自动故障转移。同时,合理...

    nginx+tomcat+ssl_https

    2. 配置Nginx:编写Nginx配置文件,设置反向代理规则,指向Tomcat实例的IP和端口,同时配置SSL证书和密钥。 3. 配置Tomcat:在Tomcat的server.xml文件中调整监听端口,以避免与Nginx冲突。 4. 集群配置:对于HTTP...

    Apache + nginx + resin 详细配置

    3. Nginx配置:Nginx作为反向代理服务器,它接收来自外部的请求,并将这些请求转发到Apache和Resin。在Nginx的`sites`配置文件中,创建一个名为`test.zen.com`的server块,设置server_name、access_log、gzip、...

    keepalived+Nginx+tomcat 搭建集群

    Nginx 的主配置文件通常是 `nginx.conf`,包含多个 server 块,每个 server 块定义了一个监听的端口和相应的处理规则。 **3. Nginx 代理服务** 3.1 正向代理与反向代理概念 正向代理是指客户端主动设置代理服务器...

    nginx+tomcat+redis完成session共享

    在本案例中,Nginx作为前端服务器,处理客户端的请求,并根据策略将这些请求转发到后面的Tomcat服务器集群。 Tomcat是Apache软件基金会的Java Servlet和JavaServer Pages(JSP)应用服务器,通常用于部署Java Web...

    nginx+tomcat在windows下做负载均衡

    【Nginx+Tomcat在Windows下做负载均衡】 负载均衡是一种网络技术,它通过将流入的网络流量分发到多个服务器,以提高服务的可用性和响应速度,防止单个服务器过载。在这个场景中,Tomcat作为Java应用服务器,由于...

    Keepalived+nginx+tomcat+redis_session_share

    - **启动Nginx**:使用`./sbin/nginx`命令启动Nginx服务,并确保防火墙允许通过`8000`端口。 #### 4. 配置Nginx - **定义Upstream**:在`nginx.conf`的`http`部分定义`tomcat`的`Upstream`,指定两台Tomcat服务器...

    Nginx+tomcat

    - 负载均衡器 (这里是 Nginx) 接收客户端的请求,并根据预先设定的规则将请求转发到后端服务器。 - 在本案例中,Nginx 使用加权轮询算法 (`weight` 参数) 分配请求。 #### 六、总结 通过以上步骤,我们成功地...

    linux + apache(nginx) + mysql + php 配置 详解

    Linux + Apache(Nginx) + MySQL + PHP,简称LAMP或LNMP,是两种常见的Web服务器架构,分别基于Apache和Nginx作为Web服务器。这两种架构都是为了搭建动态网站和Web应用程序,支持高并发和高性能。以下是它们的配置...

    Nginx+Tomcat负载均衡

    3.这里只需要修改Nginx的配置,让它通过tomcat来转发,所以我们在这一步只需要在nginx.conf中添加几行代码就行。 如果看不懂 。建议直接拿我替来用。 Copy下面的内容 替换 你的nginx.conf注意黄色端口要改为你的。 ...

    nginx+tomcat7+jdk1.7+redis--jar.rar

    Nginx配置文件(通常为`nginx.conf`)需要设置反向代理规则,将用户请求转发到Tomcat服务器。例如: ```nginx http { upstream tomcat_servers { server localhost:8080; } server { listen 80; location /...

    PHP高级工程师必知必会Nginx+keepalived+MongoDB+haproxy+Sphinx实现分布式集群部署实战视频

    - 资源消耗低:相比Apache等其他Web服务器,Nginx在处理静态文件时更节省内存资源。 - 易于配置与管理:配置文件简单直观,易于理解与修改。 - **应用场景**: - 反向代理:作为负载均衡器,将请求分发到后端...

    Liunx 下 nginx+tomcat 集群建设

    这里,`proxyName`和`proxyPort`属性指定了Nginx的公共域名和端口。 为了实现高可用性,我们还需要在多台服务器上部署Tomcat实例,并通过负载均衡器(如Nginx)进行健康检查和故障转移。Nginx提供了`health_check`...

    Nginx+tomcat 64位免安装

    标题中的"Nginx+Tomcat 64位免安装"是指一种组合配置,它将64位版本的Nginx Web服务器与64位版本的Apache Tomcat应用服务器结合在一起,而无需进行常规的安装过程。这种配置常用于提供高性能、高并发的Web服务,特别...

    实战Nginx取代Apache的高性能Web服务器_文字版

    2. 监听端口:通过`listen`指令指定Nginx监听的端口。 3. 虚拟主机:使用`server_name`指令定义虚拟主机的域名,支持正则匹配。 4. 静态文件处理:通过`root`或`alias`指令设置静态文件路径,Nginx能高效地发送静态...

    Nginx+Memcache+Linux+Tomcat集群

    在集群中,Nginx主要负责接收客户端请求,进行负载均衡,将请求转发到后端的Tomcat服务器,并缓存静态内容,减轻后端服务器的压力。 2. **Memcache**:Memcache是一种分布式内存对象缓存系统,用于临时存储(缓存)...

Global site tag (gtag.js) - Google Analytics