I have a domain on namecheap and I created a subdomain for the staging env, nevertheless the point of me doing that because I want to have this domain to point to one page in my rails app but I'm not sure how to do that.
so I went to staging and I nano the file in sites-enabled directive and added this block:
server {
listen 8880;
server_name staging.my_domain_name.com;
access_log /var/www/my_app_name/current/log/access.log;
error_log /var/www/my_app_name/current/log/error.log;
root /var/www/my_app_name/current/public/;
passenger_ruby /home/deploy/.rbenv/versions/2.1.0/bin/ruby;
passenger_enabled on;
rails_env staging;
rails_spawn_method smart-lv2;
passenger_min_instances 1;
# Maintenance
error_page 404 /404.html;
error_page 403 /404.html;
location = /404.html {
internal;
}
}
so for the root I tried to change the path to my view path
/var/www/my_app_name/current/app/views/pages/page_name.html.erb;
I also tried to add the link as it is
I'm not sure how to do this and I'm still new in DevOps
I tried to look for how to make Nginx point to one page in my rails app
Note: It listens to 8880 because i have varnish server who listen to port 80
Any help would be highly appreciated.
Thanks.
Related
I'd like to use Nginx to serve both my Rails (using passenger) and an Angular front end.
Basically, all requests that goes to / should be directed to Rails and every request that goes to /admin/* should be redirected to a Angular App.
I've found this question that would theoretically be exactly what I'm looking for. Unfortunately Dmitry's answer is a bit vague for someone (like me) who doesn't know much (next to nothing) about Nginx.
EDIT: Here's the Nginx configuration that I have tried:
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name 178.62.92.199;
passenger_enabled on;
passenger_app_env development;
root /var/www/netturing/public;
# Add index.php to the list if you are using PHP
index index.html index.htm index.nginx-debian.html;
server_name _;
location ~ ^/admin/ {
proxy_pass http: /var/www/client/admin;
}
location / {
proxy_pass http: /var/www/netturing/public;
}
}
Could someone extend the answer a bit?
Thanks!
I think haproxy it's a better tool to do this.
But I have some rails apps in standalone passenger server with nginx in front.
My suggested nginx config:
server {
# some config directives
...
# Al turrĂ³n !
# Angular App
location ~ ^/admin/ {
proxy_pass http://<URI TO ANGULAR APP>;
}
# Rails App
location / {
proxy_pass http://<URI TO RAILS APP>;
}
}
I'm using nginx with passenger and I wanted to ask, how to create rails app, without showing app name in domain.
Currently I know how to setup nginx configuration with domain like this:
domain.com/app_name
and in the routes file when I create root 'welcome#index'
I still have to type domain.com/app_name to view my controller, but how to make it display welcome controller when the domain is simply domain.com
my nginx configuration looks looks this:
server {
listen 80 default_server;
server_name domain.com;
root /home/username/rails;
location ~ ^/app_name(/.*|$) {
alias /home/username/rails/app_name/public$1; # <-- be sure to point to 'p$
passenger_base_uri /app_name;
passenger_app_root /home/username/rails/app_name;
passenger_document_root /home/username/rails/app_name/public;
passenger_app_env development;
passenger_enabled on;
}
}
when I try to comment out #passenger_base_uri /app_name I got 403 ERROR code.
Any help would be appreciated.
You need to remove the location block, alias, passenger_base_uri, passenger_app_root, and passenger_document_root. Change root to your Rails public directory too. It should look like this:
server {
listen 80 default_server;
server_name domain.com;
root /home/username/rails/app_name/public;
passenger_app_env development;
passenger_enabled on;
}
Try to follow this example of this production nginx config, which also includes some best practices for configuring your server: https://gist.github.com/mikhailov/711913
This is my Nginx Server config file
server {
listen 80;
location /node {
proxy_pass http://127.0.0.1:8080;
include /etc/nginx/proxy.conf;
}
location /ror {
root /var/www/ror/public;
passenger_enabled on;
proxy_cache off;
proxy_pass_header Server;
}
location / {
root /usr/share/nginx/www;
}
}
This is mostly a 'HelloWorld' setup to test running Node and RoR simultaneously for a REST server.
The issue is that I need to have servername.com/ror forward to /var/www/ror/public, inorder for RoR to respond. I have tried a few configurations, and cannot figure out how to get it to forward correctly. The issue seems to be that the ror URI segment gets passed on to RoR, which causes it to look for that controller, which returns a 404.
The other configuration, changing root to /var/www works as long as I include /ror/public in the URI.
So, is there a way to perform the sub URI routing on the reverse proxy in this manner?
Ok, so I added the rewrite rule.
location /ror {
root /var/www/ror/public;
rewrite ^/ror/(.*)$ /$1 last;
passenger_enabled on;
proxy_cache off;
proxy_pass_header Server;
}
The issue, however, is that now it is serving files from the default root, which in my install is /usr/nginx and is completely ignoring the root inside the location block.
**I appreciate the help. This is my first time with Nginx (Typically an Apache Fiend), so I'm having trouble wrapping my head how it's interpreting these commands.
/ror/a.txt is /var/www/ror/public/ror/a.txt in local fs, so you need to use rewrite rule in location /ror.
Like rewrite ^/ror(.*)$ $1;
I eventually figured it out.
My VHOST Section:
server {
#server_name domain.com;
listen 80;
root /var/www/rails;
passenger_enabled on;
passenger_base_uri /todo;
rails_spawn_method smart;
rails_env development;
proxy_cache off;
proxy_pass_header Server;
location /node {
proxy_pass http://127.0.0.1:8080;
include /etc/nginx/proxy.conf;
}
}
I ended up creating a new directory called rails, and inside of that I created a symbolic link to the public directory of the actual application.
ln -s /var/www/todo/public /var/www/rails/todo
Also, I was not initializing Passenger correctly, which is why it was not responding and giving back errors. This setup is not ideal, considering I now have to manually add each sub URI application, but it works.
I am trying to deploy a rail application which is in /opt/rails/my_app.
To achieve this I have installed passenger gem and configured nginx using passenger-install-nginx-module. I can access the static welcome page, however when I try some other page like home (which is generated by rails generate controller home index), the browser keep waiting and waiting for response.
This does not happen when I deploy the application using rails s on port 3000.
UPDATE
When I execute passenger-install-apache2-module, I get g++: unrecognized option '-R/usr/local/lib'. I figured that I need to change '-R/usr/local/lib' to 'Wl,-R/usr/local/lib' in order to compile the LoggingAgent properly. Can you please tell me how to change the make file?
Regarding NGINX, it's sounding as though it's a permissions issue on some of your files and/or directories. I would instead move the app to a dedicated /home directory. For example, if you had a user named tester, your nginx.conf would say (the following works for me in Production:
server {
listen YOURIPADDRESSHERE:80; #use :443 if SSL is being used.
server_name YOURFULLDOMAINNAMEHERE;
#uncomment out following if ssl is used.
#ssl on;
#ssl_certificate /etc/ssl/private/YOUR_chained.crt;
#ssl_certificate_key /etc/ssl/private/YOUR.key;
#ssl_session_cache shared:SSL:1m;
#ssl_session_timeout 5m;
#ssl_protocols SSLv3 TLSv1;
#ssl_ciphers HIGH:MEDIUM;
#ssl_prefer_server_ciphers on;
root /home/tester/YOURRAILSAPPNAME/public; # <--- be sure to point to 'public'!
passenger_enabled on;
charset utf-8;
access_log /var/log/nginx/YOURFULLDOMAINNAMEHERE-ssl_access.log;
error_log /var/log/nginx/YOURFULLDOMAINNAMEHERE-ssl_error.log warn;
location /home/tester/YOURRAILSAPPNAME/public/ {
root html;
index index.html index.htm;
}
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
Then make sure that your permissions are right (755 for all files, 644 for directories).
In my previous work I spent so much time in process of deploying rails apps to vps productions, with different configurations and gems, and finally before 9 months I discovered hatchbox.io service for deploying rails apps. It was built by Chris from GoRails and believe me it saved me so much time and nerves. This is not advertising but really service works perfect and its not expensive.
I want to run the same Rails 3 app at urls: davinci.local.dev:8081 davinci.testing.dev:8082 and with environments development and testing, respectively.
I am using Nginx and passenger. My first attempt was:
server {
listen 8081;
server_name .davinci.local.dev;
root /Users/Nerian/NetBeansProjects/DaVinci/DaVinci/public;
passenger_enabled on;
rails_env development;
#rails_env development
}
server {
listen 8082;
server_name .davinci.testing.dev;
root /Users/Nerian/NetBeansProjects/DaVinci/DaVinci/public;
passenger_enabled on;
rails_env test;
#rails_env development
}
Yet when I browse to said urls, I get to the same deployment. If I first request the testing one, then it is that the app that is served always, whether I browse to davinci.local.dev or davinci.testing.dev. If I first request the development one, then it is that one which is served always.
Both deployments are using the same root app. Is there a way to make this works?
The objective is to serve the same app at different ENV in different domains.
I had a similar problem. I wanted a Rails application (named apparat) to have two nginx instances: example.eu for english version of the site and example.ee for estonian version. They share exactly the same functionality, so it makes sense to have just one code base for it (but I do have to make sure static assets like user-uploaded images won't collide).
server {
listen 80;
server_name example.eu;
root /home/apparat/public;
passenger_enabled on;
rails_env apparat_eng;
}
server {
listen 80;
server_name example.ee;
root /home/apparat/public;
passenger_enabled on;
rails_env apparat_ee;
}
However, similar to above, if I accessed example.ee, I got the example.eu instance of my Rails app. Possibly some quirk in nginx / passenger?
Anyway I got around by making an arbitrary symlink to /home/apparat, for instance
ln -s /home/apparat /home/apparat_eng
ln -s /home/apparat /home/apparat_ee
and changed the nginx config respectively
server {
listen 80;
server_name example.eu;
root /home/apparat_eng/public;
passenger_enabled on;
rails_env apparat_eng;
}
server {
listen 80;
server_name example.ee;
root /home/apparat_ee/public;
passenger_enabled on;
rails_env apparat_ee;
}
So I'm able to trick nginx into thinking these are different directories.
I took a different approach. The development server is served by nginx using passenger while the testing server is started on demand when using rake spec:acceptance.
So nginx.conf is:
server {
listen 8081;
server_name .davinci.local.dev;
root /Users/Nerian/NetBeansProjects/DaVinci/DaVinci/public;
passenger_enabled on;
rails_env development;
#rails_env development
}
Just that.
And in spec/support/custom_env.rb
Capybara.run_server = true
Capybara.app_host = 'http://davinci.testing.dev:8082'
Capybara.server_port = 8082
And that's the magic.