CentOS 服务器,带有 nginx、php 和 Rails,以及 Passenger

CentOS 服务器,带有 nginx、php 和 Rails,以及 Passenger

我目前正在尝试让我的服务器同时使用 rails 和 php。目前我已安装了 Apache2 和 PHP(提供商的默认设置)

但我也想让 rails 工作。我们在主域上使用 PHP,并将有一个子域,rails 应用程序将从该子域运行。

Apache2 没有必要,但如何让 rails 和 php 在同一台服务器上工作?

更新 无法使用 apache,现在尝试使用我以前用过的 nginx 来完成。但我的问题是让 PHP 工作。我的 rails 应用程序可以工作,但我无法让 PHP 工作。目前我的配置文件中有这个。

server {
    listen 80;
    server_name www.domain.no domain.no;

    location = / {
        root /var/www/vhosts/domain.com/httpdocs;
        index index.php index.html index.htm;
    }

    location / {
        root   /var/www/vhosts/domain.com/httpdocs;
        index  index.php index.html index.htm;
    }

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    location ~ \.php$ {
        root   /var/www/vhosts/domain.com/httpdocs;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param QUERY_STRING $query_string;
        fastcgi_param REQUEST_METHOD $request_method;
        fastcgi_param CONTENT_TYPE $content_type;
        fastcgi_param CONTENT_LENGTH $content_length;
        fastcgi_param SCRIPT_FILENAME /var/www/vhosts/domain.com/httpdocs/$fastcgi_script_name;
        fastcgi_param REQUEST_URI $request_uri;
        fastcgi_param DOCUMENT_URI $document_uri;
        fastcgi_param DOCUMENT_ROOT $document_root;
        fastcgi_param SERVER_PROTOCOL $server_protocol;
        fastcgi_param GATEWAY_INTERFACE CGI/1.1;
        fastcgi_param SERVER_SOFTWARE nginx;
        fastcgi_param REMOTE_ADDR $remote_addr;
        fastcgi_param REMOTE_PORT $remote_port;
        fastcgi_param SERVER_ADDR $server_addr;
        fastcgi_param SERVER_PORT $server_port;
        fastcgi_param SERVER_NAME $server_name;
    }
}

但是当我尝试访问 php 文件时,我只是被重定向到 www.domain.com//service

任何想法?

答案1

我正在运行两台生产服务器,它们同时为 PHP 和 Rails 站点提供服务。最简单的解决方案是在端口 80 上运行 nginx。Nginx 管理对 Rails 页面和静态资产的请求,然后将任何 php 请求代理到监听私有端口的 Apache。这比管理 FCGI 进程更容易,而且比人们建议的无数重写规则和 PROXY_PASS 设置更省事。

答案2

只需将其设置为使用子域名指向虚拟主机即可。说明如下这里,非常简单。

<VirtualHost *:80>
    ServerName subdomain.domain.com
    DocumentRoot /railsapps/subapp/public
</VirtualHost>

答案3

要让 nginx Passenger 与 Rails 协同工作,只需在配置中添加另一台服务器:

passenger_root /usr/lib64/ruby/gems/1.8/gems/passenger-2.2.5; 
passenger_ruby /usr/bin/ruby; 

server {
    listen       80;
    server_name  SUBDOMAIN.DOMAIN.NO;
    #access_log  logs/host.access.log  main;

    passenger_enabled on;
    rails_spawn_method smart-lv2;

    rails_env    production;

    root         /PATH/TO/YOUR/PROJECTS/PUBLIC;

    location ~* \.(ico|jpg|jpeg|gif|png|css|js)$ {
       root   /PATH/TO/YOUR/PROJECTS/PUBLIC;
       expires      30d;
    }

    error_page  404              /404.html;
    error_page  500 502 503 504  /50x.html;

    location = /50x.html {
        root   html;
    }

location ~ \.html\.erb$ {
    deny  all;
}

location ~ /\.ht {
        deny  all;
    }
}

更新:关于您的 php 问题,请尝试以下一组参数:

  fastcgi_param   DOCUMENT_ROOT   /var/www/vhosts/domain.com/httpdocs;
  fastcgi_param   SCRIPT_FILENAME /var/www/vhosts/domain.com/httpdocs$fastcgi_script_name;
  fastcgi_param   PATH_TRANSLATED /var/www/vhosts/domain.com/httpdocs$fastcgi_script_name;

  fastcgi_param   SCRIPT_NAME     $fastcgi_script_name;
  fastcgi_param   QUERY_STRING    $query_string;
  fastcgi_param   CONTENT_TYPE    $content_type;
  fastcgi_param   CONTENT_LENGTH  $content_length;
  fastcgi_param   REDIRECT_STATUS 200;
  fastcgi_param   SERVER_PROTOCOL $server_protocol;
  fastcgi_param   SERVER_NAME     $server_name;
  fastcgi_param   REQUEST_URI     $request_uri;
  fastcgi_param   REQUEST_METHOD  $request_method;
  fastcgi_param   REMOTE_USER     $remote_user;
  fastcgi_param   REMOTE_ADDR     $remote_addr;
  fastcgi_param   REMOTE_PORT     $remote_port; 

相关内容