我正在尝试使用Puma和Nginx来提供我的rails应用程序。当我到达页面时,它会呈现默认的nginx页面。我尝试过两种不同的配置。第一次失败,"upstream" directive is not allowed here.
第二次警告Starting nginx: nginx: [warn] conflicting server name "localhost" on 0.0.0.0:80, ignored
upstream puma {
server unix:///home/deploy/apps/exelon-api/shared/tmp/sockets/rails-api-puma.sock;
}
server {
listen 80 default_server deferred;
# server_name example.com;
root /home/deploy/apps/rails-api/current/public;
access_log /home/deploy/apps/rails-api/current/log/nginx.access.log;
error_log /home/deploy/apps/rails-api/current/log/nginx.error.log info;
location ^~ /assets/ {
gzip_static on;
expires max;
add_header Cache-Control public;
}
try_files $uri/index.html $uri @puma;
location @puma {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://puma;
}
error_page 500 502 503 504 /500.html;
client_max_body_size 10M;
keepalive_timeout 10;
}
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
access_log /var/log/nginx/access.log;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_requests 100;
keepalive_timeout 65;
gzip on;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_proxied any;
gzip_vary off;
gzip_types text/plain text/css application/x-javascript text/xml application/xml application/rss+xml application/atom+xml text/javascript application/javascript application/json text/mathml;
gzip_min_length 1000;
gzip_disable "MSIE [1-6]\.";
variables_hash_max_size 1024;
variables_hash_bucket_size 64;
server_names_hash_bucket_size 64;
types_hash_max_size 2048;
types_hash_bucket_size 64;
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
upstream puma_rails-api_production {
server unix:/home/deploy/apps/rails-api/shared/tmp/sockets/rails-api-puma.sock fail_timeout=0;
}
server {
listen 80;
client_max_body_size 4G;
keepalive_timeout 10;
error_page 500 502 504 /500.html;
error_page 503 @503;
server_name localhost rails-api.local;
root /home/deploy/apps/rails-api/current/public;
try_files $uri/index.html $uri @puma_rails-api_production;
location @puma_rails-api_production {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://puma_rails-api_production;
# limit_req zone=one;
access_log /home/deploy/apps/rails-api/shared/log/nginx.access.log;
error_log /home/deploy/apps/rails-api/shared/log/nginx.error.log;
}
location ^~ /assets/ {
gzip_static on;
expires max;
add_header Cache-Control public;
}
location = /50x.html {
root html;
}
location = /404.html {
root html;
}
location @503 {
error_page 405 = /system/maintenance.html;
if (-f $document_root/system/maintenance.html) {
rewrite ^(.*)$ /system/maintenance.html break;
}
rewrite ^(.*)$ /503.html break;
}
if ($request_method !~ ^(GET|HEAD|PUT|PATCH|POST|DELETE|OPTIONS)$ ){
return 405;
}
if (-f $document_root/system/maintenance.html) {
return 503;
}
location ~ \.(php|html)$ {
return 405;
}
}
答案 0 :(得分:2)
第二个错误实际上表示您有两个if(!userAnswer.matches("-?\\d*\\.?\\d*e\\^-?\\d*\\.?\\d*x") && //exponential
!userAnswer.matches("-?\\d*\\.?") && //constant
!userAnswer.matches("-?\\[a-zA-Z]") && //variable
!userAnswer.matches("-?\\d*\\.?\\[a-zA-Z]") && //constant w/ variable
!userAnswer.matches("-?\\[a-zA-Z]\\^-?\\d*\\.") && //variable w/ exponent
!userAnswer.matches("-?\\d*\\.?\\[a-zA-Z]\\^-?\\d*\\."))//constant w/ variable w/ exponent
{//do something}
部分定义为server
(这实际上意味着listen 80
其中0.0.0.0:80
等于"任何地址&#34 ;)和0.0.0.0
中的localhost
。
所以,你必须采取的行动取决于你想要达到的目标:
如果您希望您的应用可以通过某个主机名与您在服务器上拥有(或希望将来拥有的)其他应用一起访问,请说{{1} },您只需从添加的条目中删除server_name
中的example.com
即可。
在这种情况下,您必须通过localhost
(server_name
)中指定的名称之一访问您的应用,server_name
和服务器IP }。
注意,如果您仍需要确保已指定的域已解析为服务器地址。
如果它位于您自己的本地计算机上,并且您希望能够访问您的应用程序以进行开发(例如,测试它如何与nginx一起使用),您可以
添加行example.com
(例如,localhost
)。
如果在您拥有的某个服务器上,并且您希望其他人能够通过同一个域访问应用,则必须购买/注册(如果尚未由其他人注册)然而,它发生了)并创建指向您的应用服务器IP的127.0.0.1 name.here
DNS记录。
如果您希望此应用在服务器上默认,您可以:
查找使用127.0.0.1 example.com
定义的其他A
部分(因此,如果他们没有server
或听取任何其他端口,例如8080或443,您可以放心地离开从那里删除listen 80 default;
- 每个端口和IP组合只能有一个默认服务器部分。
将服务器部分中的default
更改为default
。这将告诉nginx您希望此服务器部分处理其他部分未捕获的所有请求。
这将允许您通过IP访问应用并将任何域指向它,而无需在listen 80;
部分中指定它。您仍然需要注册或购买域名才能将其指向应用。