我目前正在尝试让我的服务器同时使用 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;