nginx + apache 做端口(转发)

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,在文件的最后添加一下内容

Php代码

  1. <VirtualHost *:8080>
  2. ServerName   cms.xxx.com
  3. DocumentRoot /var/www/dedecms
  4. <Directory />
  5. Options FollowSymLinks
  6. AllowOverride None
  7. </Directory>
  8. <Directory /var/www/dedecms>
  9. Options Indexes FollowSymLinks MultiViews
  10. AllowOverride None
  11. Order allow,deny
  12. allow from all
  13. </Directory>
  14. ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
  15. <Directory "/usr/lib/cgi-bin">
  16. AllowOverride None
  17. Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
  18. Order allow,deny
  19. Allow from all
  20. </Directory>
  21. ErrorLog ${APACHE_LOG_DIR}/zuzher_cms_error.log
  22. # Possible values include: debug, info, notice, warn, error, crit,
  23. # alert, emerg.
  24. LogLevel warn
  25. CustomLog ${APACHE_LOG_DIR}/access.log combined
  26. Alias /doc/ "/usr/share/doc/"
  27. <Directory "/usr/share/doc/">
  28. Options Indexes MultiViews FollowSymLinks
  29. AllowOverride None
  30. Order deny,allow
  31. Deny from all
  32. </Directory>
  33. </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

Java代码

  1. http {
  2. include       mime.types;
  3. default_type  application/octet-stream;
  4. sendfile        on;
  5. keepalive_timeout  65;
  6. upstream app1_server {
  7. server unix:/home/naitnix/workspace/app1/tmp/sockets/unicorn.sock fail_timeout=0;
  8. }
  9. upstream cms_server{
  10. server 117.79.111.xx:8080;
  11. }
  12. include       /usr/local/nginx/conf/services/app1.conf;
  13. include       /usr/local/nginx/conf/services/cms.conf;
  14. }

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

Java代码

  1. server {
  2. listen       80;
  3. server_name  cms.xxx.com;
  4. location / {
  5. proxy_redirect off;
  6. proxy_set_header Host $host;
  7. proxy_set_header X-Forwarded-Host $host;
  8. proxy_set_header X-Forwarded-Server $host;
  9. proxy_set_header X-Real-IP $remote_addr;
  10. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  11. proxy_buffering on;
  12. proxy_pass http://cms_server;#这里指定上面的cms_server de upstream
  13. }
  14. error_page   500 502 503 504  /50x.html;
  15. location = /50x.html {
  16. root   html;
  17. }
  18. }

保存,并重启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 做端口(转发)

时间: 2024-11-06 20:51:14

nginx + apache 做端口(转发)的相关文章

使用iptables做端口转发

#!/bin/sh IPT="/sbin/iptables" /bin/echo "1" > /proc/sys/net/ipv4/ip_forward /sbin/modprobe ip_tables /sbin/modprobe iptable_filter /sbin/modprobe iptable_nat /sbin/modprobe ip_conntrack /sbin/modprobe ip_conntrack_ftp /sbin/modprob

使用rinetd做端口转发

最近项目上遇到一个需要代理做多个端口转发的需求,考虑到需求只是做tcp的网络转发没有业务需求用nginx比较繁琐,就使用了rinetd,整理记录一下. 一.安装rinetd软件1.wget http://www.boutell.com/rinetd/http/rinetd.tar.gz #下载安装文件:2.tar zvxf rinetd.tar.gz #解压下载到的文件:3.cd rinetd/ #进入到解压目录:4.sed -i 's/65536/65535/g' rinetd.c #将rin

linux下用rinetd做端口转发

原文转自:http://blog.chinaunix.net/uid-345389-id-2131648.html 经常遇到端口转发的情况,用iptable是经常的,不过每次都需要查手册.看到菜包子的文章,感觉还不错,测试感觉很好用. 端口转发映射的程序叫rinetd,并没有发现版本之说,只有一个下载地址.直接manke编译安装即可. [[email protected] tmp]# tar xvfz rinetd.tar.gz rinetd/rinetd/getopt.hrinetd/rine

CentOS下用rinetd做端口转发

windows下的端口转发一般用的是自带的nat和porttunnel.portmap linux下端口转发映射的程序叫rinetd,启动方法rinetd -c /etc/rinetd.conf  ,pkill rinetd  关闭进程 工具主页:http://www.boutell.com/rinetd/ 软件下载,解压安装 wget http://www.boutell.com/rinetd/http/rinetd.tar.gz tar zxvf rinetd.tar.gz make mak

liunx 公网跳转到内网(做端口转发)使用xshell工具

1.使用xshell连接到公网(ip:port)用户名密码 2.在此处添加转移规则 3.右键点击添加(选择socks4/5协议 端口 填写你需要转发的端口) 3.连接到内网 跟之前一样(ip:port)不过,这里需要代理 4.添加代理端口 上传文件可使用(xftp)也可以根据RZ命令 原文地址:https://www.cnblogs.com/aizj/p/9210709.html

nginx配置多端口转发

[[email protected] conf]# cat nginx.confuser nginx nginx;worker_processes 8; error_log /opt/nginx/logs/nginx_error.log crit;pid /opt/nginx/logs/nginx.pid; worker_rlimit_nofile 51200;events{use epoll;worker_connections 51200;} http{include mime.types;

利用iptables做端口转发

#!/bin/bash #sh forward_port.sh add/del port #sh forward_port.sh add 80 if [ -z $1 ];then echo "参数1为空" elif [ -z $2 ];then echo "参数2为空" fi mode=$1 pro='tcp' #src_host='47.97.205.48' src_host='47.97.205.48' src_port=$2 Dst_Host='183.129

nginx1.9+做TCP代理(端口转发)

如题所示,nginx在1.9版本之后可以充当端口转发的作用,即:访问该服务器的指定端口,nginx就可以充当端口转发的作用将流量导向另一个服务器,同时获取目标服务器的返回数据并返回给请求者.nginx的TCP代理功能跟nginx的反向代理不同的是:请求该端口的所有流量都会转发到目标服务器,而在反向代理中可以细化哪些请求分发给哪些服务器:另一个不同的是,nginx做TCP代理并不仅仅局限于WEB的URL请求,还可以转发如memcached.MySQL等点到点的请求 实现步骤如下: (1)nginx

Ubuntu 16.04 -- 同时配置Nginx(转发)和frp(内网映射)和HTTPS(ca加密) - 端口转发

Ubuntu16.04下: sudo apt -get nginx 用这条命令安装完nginx之后, nginx在该目录下: 然后配置nginx: 如下: 红圈圈住的地方多写几个可以做负载均衡. 端口转发 什么是端口转发 当我们在服务器上搭建一个图书以及一个电影的应用,其中图书应用启动了 8001 端口,电影应用启动了 8002 端口.此时如果我们可以通过 localhost:8001 //图书 localhost:8002 //电影 但我们一般访问应用的时候都是希望不加端口就访问域名,也即两个