如何配置 nginx 以代理到 rails 应用程序?这样我就不用说 domain.com:port
How to config nginx to proxy to rails app? so that i dont have to say domain.com:port
更新: 目前我在 domain.com:3000 访问我的应用程序,但我想访问 domain.com 以查看我的应用程序
我在 80 设置了 nginx 以在 3000 代理我的 rails 应用程序。下面是配置
upstream railsapp {
server 127.0.0.1:3000;
}
server {
listen 80;
server_name APP;
# Tell Nginx and Passenger where your app's 'public' directory is
root /var/www/APP/current/public;
index index.html index.htm;
# Static assets are served from the mentioned root directory
location / {
root /var/www/APP/current;
index index.html index.htm;
proxy_pass http://railsapp/;
proxy_redirect off;
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-Real-Port $server_port;
# proxy_set_header X-Real-Scheme $scheme;
proxy_set_header X-NginX-Proxy true;
}
# Turn on Passenger
passenger_enabled on;
passenger_ruby /usr/local/rvm/gems/ruby-2.1.3/wrappers/ruby;
}
我指的是:
它位于 /etc/nginx/sites-enabled/APP.conf
并包含在 /etc/nginx/nginx.conf 中,如下所示 http{...}
include /etc/nginx/sites-enabled/*;
但我的 APP.com 仍然显示 'Welcome to nginx on Ubuntu!' 并且 APP.com:3000 显示我的应用程序。我做错了什么?
我正在使用什么:
Ubuntu 14.04 ec2 实例
nginx 1.8.0
独角兽服务器 3000
您只需添加一个新的服务器{}块并添加passenger_root。这就是我所做的。然后在配置之后,在你的浏览器上尝试 server_name:port "APP.com:3000"
upstream railsapp {
server 127.0.0.1:3000;
}
// add new server block here... modify with below example.
server {
listen *:3000;
server_name APP.com;
rack_env development;
root /directory/to/rails-app/public;
index index.html index.htm index.html.erb;
passenger_enabled on;
}
server {
listen 80;
server_name APP;
# Tell Nginx and Passenger where your app's 'public' directory is
root /var/www/APP/current/public;
index index.html index.htm;
# Static assets are served from the mentioned root directory
location / {
root /var/www/APP/current;
index index.html index.htm;
proxy_pass http://railsapp/;
proxy_redirect off;
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-Real-Port $server_port;
# proxy_set_header X-Real-Scheme $scheme;
proxy_set_header X-NginX-Proxy true;
}
# Turn on Passenger
passenger_enabled on;
//add passenger_root
passenger_root /directory/to/phusion_passenger/locations.ini;
passenger_ruby /usr/local/rvm/gems/ruby-2.1.3/wrappers/ruby;
}
我正在尝试 运行 独角兽,这样我就可以将我的应用分叉到多个实例。我想这里的问题是,我设置了 passenger_enabled 并且实际上是 运行ning unicorn on 3000.
所以我 运行 乘客
passenger start -a 127.0.0.1 -p 3000 -d -e production
我的 nginx conf 是这样的,
server {
listen 80;
server_name www.APPNAME.com;
# Tell Nginx and Passenger where your app's 'public' directory is
root /var/www/APPNAME/current/public;
index index.html index.htm;
# Static assets are served from the mentioned root directory
location / {
# root /var/www/APPNAME/current;
# index index.html index.htm;
proxy_pass http://127.0.0.1:3000;
proxy_redirect off;
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-Real-Port $server_port;
# proxy_set_header X-Real-Scheme $scheme;
proxy_set_header X-NginX-Proxy true;
}
# Turn on Passenger
passenger_enabled on;
passenger_ruby /usr/local/rvm/gems/ruby-2.1.3/wrappers/ruby;
}
现在一切正常!
更新: 目前我在 domain.com:3000 访问我的应用程序,但我想访问 domain.com 以查看我的应用程序
我在 80 设置了 nginx 以在 3000 代理我的 rails 应用程序。下面是配置
upstream railsapp {
server 127.0.0.1:3000;
}
server {
listen 80;
server_name APP;
# Tell Nginx and Passenger where your app's 'public' directory is
root /var/www/APP/current/public;
index index.html index.htm;
# Static assets are served from the mentioned root directory
location / {
root /var/www/APP/current;
index index.html index.htm;
proxy_pass http://railsapp/;
proxy_redirect off;
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-Real-Port $server_port;
# proxy_set_header X-Real-Scheme $scheme;
proxy_set_header X-NginX-Proxy true;
}
# Turn on Passenger
passenger_enabled on;
passenger_ruby /usr/local/rvm/gems/ruby-2.1.3/wrappers/ruby;
}
我指的是:
它位于 /etc/nginx/sites-enabled/APP.conf
并包含在 /etc/nginx/nginx.conf 中,如下所示 http{...}
include /etc/nginx/sites-enabled/*;
但我的 APP.com 仍然显示 'Welcome to nginx on Ubuntu!' 并且 APP.com:3000 显示我的应用程序。我做错了什么?
我正在使用什么:
Ubuntu 14.04 ec2 实例
nginx 1.8.0
独角兽服务器 3000
您只需添加一个新的服务器{}块并添加passenger_root。这就是我所做的。然后在配置之后,在你的浏览器上尝试 server_name:port "APP.com:3000"
upstream railsapp {
server 127.0.0.1:3000;
}
// add new server block here... modify with below example.
server {
listen *:3000;
server_name APP.com;
rack_env development;
root /directory/to/rails-app/public;
index index.html index.htm index.html.erb;
passenger_enabled on;
}
server {
listen 80;
server_name APP;
# Tell Nginx and Passenger where your app's 'public' directory is
root /var/www/APP/current/public;
index index.html index.htm;
# Static assets are served from the mentioned root directory
location / {
root /var/www/APP/current;
index index.html index.htm;
proxy_pass http://railsapp/;
proxy_redirect off;
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-Real-Port $server_port;
# proxy_set_header X-Real-Scheme $scheme;
proxy_set_header X-NginX-Proxy true;
}
# Turn on Passenger
passenger_enabled on;
//add passenger_root
passenger_root /directory/to/phusion_passenger/locations.ini;
passenger_ruby /usr/local/rvm/gems/ruby-2.1.3/wrappers/ruby;
}
我正在尝试 运行 独角兽,这样我就可以将我的应用分叉到多个实例。我想这里的问题是,我设置了 passenger_enabled 并且实际上是 运行ning unicorn on 3000.
所以我 运行 乘客
passenger start -a 127.0.0.1 -p 3000 -d -e production
我的 nginx conf 是这样的,
server {
listen 80;
server_name www.APPNAME.com;
# Tell Nginx and Passenger where your app's 'public' directory is
root /var/www/APPNAME/current/public;
index index.html index.htm;
# Static assets are served from the mentioned root directory
location / {
# root /var/www/APPNAME/current;
# index index.html index.htm;
proxy_pass http://127.0.0.1:3000;
proxy_redirect off;
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-Real-Port $server_port;
# proxy_set_header X-Real-Scheme $scheme;
proxy_set_header X-NginX-Proxy true;
}
# Turn on Passenger
passenger_enabled on;
passenger_ruby /usr/local/rvm/gems/ruby-2.1.3/wrappers/ruby;
}
现在一切正常!