无法通过nginx反向代理部署Tornado,未显示错误

0 投票
1 回答
1153 浏览
提问于 2025-04-18 12:12

我正在尝试用 Nginx 作为代理来部署我的 Tornado 应用。我是在 Ramnode 的 VPS 上运行这个应用,配置如下:

  • 512MB 内存
  • 512MB 虚拟交换内存
  • 2 个 CPU 核心
  • 120GB SSD 缓存硬盘空间
  • 1Gbps 网络端口

目前我没有使用 supervisor,而是手动启动了四个 Tornado 进程的实例:

sudo python /home/magneto/pricechase/main.py --port=8000 &
sudo python /home/magneto/pricechase/main.py --port=8001 &
sudo python /home/magneto/pricechase/main.py --port=8002 &
sudo python /home/magneto/pricechase/main.py --port=8003 &

现在我可以通过 pricechase.in:8000 到 pricechase.in:8003 访问这个网站。

我创建了一个新的用户 nginx,并给了它对我的项目目录的权限:

sudo adduser --system --no-create-home --disabled-login --disabled-password --group nginx
sudo chown -R nginx:nginx /home/magneto/pricechase/

以下是我项目的配置文件,位于 /etc/nginx/sites-enabled/pricechase.in

user nginx;
worker_processes 5;

error_log /var/log/nginx/error.log;

pid /var/run/nginx.pid;

events {
    worker_connections 1024;
    use epoll; 
}

http{

    proxy_next_upstream error;

    upstream tornadoes { 
        server 127.0.0.1:8000;
        server 127.0.0.1:8001;
        server 127.0.0.1:8002;
        server 127.0.0.1:8003;
    }

    include /etc/nginx/mime.types;
    default_type application/octet-stream;  

    access_log /var/log/nginx/access.log;

    keepalive_timeout 65;
    proxy_read_timeout 200;
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    gzip on;
    gzip_min_length 1000;
    gzip_proxied any;
    gzip_types text/plain text/html text/css text/xml
               application/x-javascript application/xml
               application/atom+xml text/javascript;


    server { 
        listen 80;
        server_name pricechase.in www.pricechase.in;

        location /static/ {
            root /home/magneto/pricechase/static; 
            if ($query_string) {
                expires max; 
            }
        }
        location / {
            proxy_pass_header Server; 
            proxy_set_header Host $http_host; 
            proxy_redirect off;
            proxy_set_header X-Real-IP $remote_addr; 
            proxy_set_header X-Scheme $scheme; 
            proxy_pass http://tornadoes;
        } 
    }
}

当我尝试重启 Nginx 服务时,出现了以下错误:

Restarting nginx: nginx: [emerg] unknown directive "user" in /etc/nginx/sites-enabled/pricechase.in:1
nginx: configuration file /etc/nginx/nginx.conf test failed

根据一些回答的提示,我在 /etc/nginx/nginx.conf 中注释掉了以下行:

# include /etc/nginx/sites-enabled/*;

现在我可以启动/重启它了,但当我输入 pricechase.in 时,网站没有打开。它也无法访问静态文件,比如这个链接:http://pricechase.in/static/css/tooltipster.css,这个文件位于 /home/magneto/pricechase/static/css/tooltipster.css

以下是 /etc/nginx/nginx.conf 的内容:

user www-data;
worker_processes 4;
pid /var/run/nginx.pid;

events {
    worker_connections 768;
    # multi_accept on;
}

http {

    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;
    # server_tokens off;

    # server_names_hash_bucket_size 64;
    # server_name_in_redirect off;

    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    gzip on;
    gzip_disable "msie6";

    # gzip_vary on;
    # gzip_proxied any;
    # gzip_comp_level 6;
    # gzip_buffers 16 8k;
    # gzip_http_version 1.1;
    # gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;

    ##
    # Virtual Host Configs
    ##

    include /etc/nginx/conf.d/*.conf;
    # include /etc/nginx/sites-enabled/*;
    # include /etc/nginx/sites-enabled/pricechase.in;
}
  • 我该如何调试这个问题?
  • 为什么没有记录任何错误?我检查了访问日志和错误日志(位于 /var/log/nginx/
  • 关于 Nginx 配置文件有什么建议或改进吗?
  • 如果我理解正确的话,/etc/nginx/nginx.conf 就像一个基础模板,所有其他主机需要的通用配置都应该包含在这里,对吗?
  • 如果我想添加另一个域名并提供不同的 Tornado 实例,我想我需要在 sites-enabled 中添加新的配置,但会不会有冲突?比如,我想让 http://abc.xyz.com 提供位于 /home/magneto/blog 的静态内容,而 http://pqrs.com 提供 8005 到 8008 端口的 Tornado 进程。

1 个回答

1

在sites-enabled中的配置片段只应该包含“http”块里面的内容;其他的部分只能出现在nginx.conf的最顶层。

撰写回答