如何架设自己的Linux开发环境

2016-09-14  本文已影响0人  程序员有话说

背景

问题

方案

场景

我们如何让一台服务器同时支持多种不同的web服务器,比如如何同时让我们的这台测试机上面能跑起php,nodejs,ruby on rails,如果有必要的话再加一个tomcat来跑jsp也是可以的。

问题与解决思路

问题1: 一台服务器共用80端口提供web服务

** 利用 **:nginx反向代理实现多个web服务共享80端口

  1. 第一步,先让nginx在80端口启动,nginx启动成功后再让其它服务器在别的端口启动服务。为了保险期间,自己可以先测试一下,各个服务在不同端口是否工作正常。
  2. 然后我们就需要为各个服务创建虚拟主机,由于多个服务跑在一台机器上,所以为了能有所区分,我们得给这些服务分别绑定不同域名,如果是在本机测试,域名绑定的工作可以选择在自己笔记本的宿主机操作系统里面修改hosts文件
  3. 这一步完成以后,我们在nginx的配置中增加虚拟主机配置,为了方便管理,每一个虚拟主机的配置最好是能有一个独立的文件存放
  4. 虚拟主机反向代理配置
server {
    listen 80;
    server_name test.ydma.cn;
    location / {
          proxy_set_header X-Real-IP $remote_addr;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_set_header Host  $http_host;
          proxy_set_header X-Nginx-Proxy true;
          proxy_pass http://127.0.0.1:9001;
    }
        
    location ~ \.jsp$ {#后缀为jsp的网址访问规则
        proxy_pass http://jsp;
    }

    location ~ \.js$ {#后缀为js的网址访问规则
        proxy_pass http://nodejs;
    }
    location ~ \.php$ {#后缀为php的网址访问规则
        proxy_pass http://php;
    }
}

备注:在ubuntu中,这个文件应该放在/etc/nginx/sites-available里面,然后再通过ln -s 做一个软连接放在sites-enabled文件夹中,nginx.conf主配置文件中有这么两行配置include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*;

解析:我们可以看到上面的配置文件中 由nginx监听主机名为 server_name test.ydma.cn ,端口号 listen 80 ; location设置为 proxy_pass http://127.0.0.1:9001,也就是说把访问test.ydma.cn:80的请求交给127.0.0.1:9001端口去处理,proxy_set_header的配置是为了将http请求的头部信息做相应的改写,如果没有这些设置,转发后的请求得到的请求信息就是nginx服务的信息,而不是外部用户的信息。把这个文件复制几分,只需要改写server_name以及proxy_pass后的端口号,那么我们就可以让nodes 、ruby on rails 、apache、等多个web服务同时共用80端口跑起来了。

完整配置:

server {
    listen       3001;
    server_name  localhost;

    root /web/www/html/a;
    index index.php index.html index.htm;

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

    location ~ \.php$ {
        root           /web/www/html/a;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;  #出现下载问题
        include        fastcgi_params;
    }

}

server {
        listen       80;   #设置监听的端口
        server_name  local.a.com; #设置监听的域名
        location / {
            index  index.html index.htm index.php;
            proxy_redirect off;
            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_pass http://127.0.0.1:3001; #设置跳转的域名和端口
            #autoindex  on;
        }
}

问题2:在项目开发过程中,我们用到的各种工具和软件,通常会有依赖,比如hadoop,我们以hadoop2.x为例,它依赖jdk7,我们制作的一款机器学习软件大量使用java函数式编程,需要jdk8,那么我们怎么样解决这个问题呢?

** 利用 **:配置环境变量

设计思路

有一个很好的设计思路能解决这个问题,无论你希望有多少个版本并存在操作系统且无冲突。

上一篇下一篇

猜你喜欢

热点阅读