解决新 Nginx 安装问题的步骤

解决新 Nginx 安装问题的步骤

我正在运行 Ubuntu 12.04 的新服务器上设置 Nginx。以下是我目前所做的工作:

  1. 安装的nginx:

    aptitude -y install nginx
    
  2. 删除了默认的 vhost 配置:

    rm /etc/nginx/sites-enabled/*
    
  3. 添加了我自己的 vhost 配置:

    mv myapp.conf /etc/nginx/sites-enabled/
    
  4. 启动nginx:

    service nginx start
    

vhost 文件看起来像这样:

upstream unicorn_server {
  server unix:/tmp/APP_NAME.sock fail_timeout=0;
}

server {
  listen 80 default deferred;
  client_max_body_size 4G;
  server_name _;
  keepalive_timeout 5;
  access_log  /var/log/nginx/APP_NAME.access.log;

  root /var/www/APP_NAME/current/public;

  # auth

  try_files $uri/index.html $uri.html $uri @app;

  location @app {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    # proxy_set_header X-Forwarded-Proto https;
    proxy_set_header Host $http_host;
    proxy_redirect off;
    proxy_pass http://unicorn_server;
  }

  error_page 500 502 503 504 /500.html;
  location = /500.html {
    root /var/www/APP_NAME/current/public;
  }
}

我可以确认 Nginx 正在运行:

service nginx status
 * nginx is running

但是,我似乎无法访问它:

curl 123.456.789.0 # example IP
curl: (7) couldn't connect to host

我还没有启动 Unicorn 服务器,但这应该不是问题。如果 Unicorn 没有运行,我预计会看到 502 错误。错误或访问日志中没有输出。我应该采取哪些步骤来解决问题?

答案1

  • nginx -t在配置文件上运行
  • 检查日志文件 - 包括你指定的文件和可能的“默认”文件(如果 nginx 在加载配置之前无法使用指定的文件,或者感觉需要的话),当然还有可能包含错误消息的全局日志
  • 停止 nginx,然后手动启动它(即不使用 init 脚本)并查看输出。然后终止 nginx 并使用 init 脚本启动它。
  • 检查 netstat 是否显示 nginx 正在监听。如果没有,就不要费心测试它是否可访问,找出原因。如果它正在监听,请在本地测试它(wget)以查明 nginx 或连接是否中断。
  • 如果没有问题(即机器上没有运行其他程序),请尝试重新启动它。

答案2

deferred您发布的此配置唯一真正不寻常的地方是在指令中的使用listen

似乎有些网站在其示例配置中提供了这一点并“推荐”它,但实际上并没有解释它能做什么(除非两端都设置了,否则情况很快就会变得非常奇怪,因为这个技术上巧妙地破坏了 TCP 协议。

我要做的第一件事就是deferred从您的指令中删除此选项listen

即使这不能解决问题,我也不会把它放回去。如果您以后想调查其所谓的性能优势,您可以在严格控制的测试环境中进行调查。

答案3

服务器上的防火墙阻止了 80 端口的连接?请尝试在服务器上执行“curl localhost”以检查是否可以本地访问。

相关内容