首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用nginx设置负载均衡器

使用nginx设置负载均衡器
EN

Stack Overflow用户
提问于 2019-04-03 09:24:53
回答 1查看 243关注 0票数 0

我正在学习如何在AWS上使用nginx设置负载均衡器。

我在AWS上设置了一个基本的ubuntu 18.04服务器,然后执行了以下操作:

代码语言:javascript
复制
sudo apt-get update
sudo apt-get upgrade -y
sudo apt-get install nginx -y

然后,我将/etc/nginx/nginx.conf替换为:

代码语言:javascript
复制
upstream backend {
    server xxx.24.20.11;
    server xxx.24.20.12;
}

server {
    listen 80;
    location / {
        proxy_pass http://backend;
    }
}

然后,我尝试通过执行以下操作重新启动nginx服务器:

代码语言:javascript
复制
sudo service nginx stop
sudo service nginx start

但我收到了错误消息:

代码语言:javascript
复制
Job for nginx.service failed because the control process exited with error code.
See "systemctl status nginx.service" and "journalctl -xe" for details.

所以,我做了

代码语言:javascript
复制
systemctl status nginx.service

下面是我得到的信息:

代码语言:javascript
复制
nginx.service - A high performance web server and a reverse proxy server
   Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
   Active: failed (Result: exit-code) since Wed 2019-04-03 01:13:27 UTC; 23s ago
     Docs: man:nginx(8)
  Process: 1822 ExecStop=/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid (code=exited, status=0/SUCCESS)
  Process: 1748 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
  Process: 1865 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=1/FAILURE)
  Main PID: 1752 (code=exited, status=0/SUCCESS)

Apr 03 01:13:27 load-balancer.xxxx.com systemd[1]: Starting A high performance web server and a reverse proxy server...
Apr 03 01:13:27 load-balancer.xxx.com nginx[1865]: nginx: [emerg] "upstream" directive is not allowed here in /etc/nginx/nginx.conf:2
Apr 03 01:13:27 load-balancer.xxx.com nginx[1865]: nginx: configuration file /etc/nginx/nginx.conf test failed
Apr 03 01:13:27 load-balancer.xxx.com systemd[1]: nginx.service: Control process exited, code=exited status=1
Apr 03 01:13:27 load-balancer.xxx.com systemd[1]: nginx.service: Failed with result 'exit-code'.
Apr 03 01:13:27 load-balancer.xxx.com systemd[1]: Failed to start A high performance web server and a reverse proxy server.

我看了两个不同的教程,它们都使用了"upstream“指令。有什么想法吗?

编辑:

我将nginx.conf恢复为其原始格式:

代码语言:javascript
复制
sudo cp /etc/nginx/nginx.original /etc/nginx/nginx.conf

然后,我做了以下工作:

代码语言:javascript
复制
sudo su
echo > /etc/nginx/sites-available/load-balancer.conf

然后,我将以下内容添加到/etc/nginx/sites available/load-balancer.conf中

代码语言:javascript
复制
http {
  upstream backend {
    server docker-one.xxxxxxx.com;
    server docker-two.xxxxxxx.com;
  }

  server {
    listen 80;
    server_name load-balancer.xxxxxxx.com;
    location / {
      proxy_pass http://backend;
    }
  }
}

load-balancer.xxxxxx.com是我用于测试的域名,docker-one和docker-2是运行实际web应用程序的两个域。

然后我做了一个符号链接:

代码语言:javascript
复制
ln -s /etc/nginx/sites-available/load-balancer.conf /etc/nginx/sites-enabled/

然后我重新启动了服务器。当它重新启动时,我执行了以下操作:

代码语言:javascript
复制
sudo service nginx stop
sudo service nginx start

我收到一条错误消息,告诉我nginx服务失败,所以我这样做了:

代码语言:javascript
复制
systemctl status nginx.service

这给了我以下错误:

代码语言:javascript
复制
● nginx.service - A high performance web server and a reverse proxy server
   Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
   Active: failed (Result: exit-code) since Wed 2019-04-03 19:42:34 UTC; 19s ago
     Docs: man:nginx(8)
  Process: 1549 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=1/FAILURE)

Apr 03 19:42:34 load-balancer.xxxxxxx.com systemd[1]: Starting A high performance web server and a reverse proxy server...
Apr 03 19:42:34 load-balancer.xxxxxxx.com nginx[1549]: nginx: configuration file /etc/nginx/nginx.conf test failed
Apr 03 19:42:34 load-balancer.xxxxxxx.com systemd[1]: nginx.service: Control process exited, code=exited status=1
Apr 03 19:42:34 load-balancer.xxxxxxx.com systemd[1]: nginx.service: Failed with result 'exit-code'.
Apr 03 19:42:34 load-balancer.xxxxxxx.com systemd[1]: Failed to start A high performance web server and a reverse proxy server.
EN

回答 1

Stack Overflow用户

发布于 2019-04-03 10:02:33

正在覆盖您删除的整个nginx.conf上下文。根据https://nginx.org/en/docs/http/ngx_http_upstream_module.html#upstream,仅允许在http {}块内上行

Debian/ubuntu使用/etc/nginx/ site -available/*进行站点定义,您需要在其中创建自己的配置文件,如果需要,每个vhost一个配置文件。然后启用它,这样它就会变成符号链接到/etc/nginx/sites enabled/*。或者,为简单起见,使用/etc/nginx/sites available/default作为现有配置文件,在其中进行更改。保存原始文件,直到你让它正常工作。并在所述更改之后重新加载nginx。当然,还要还原原始的/etc/nginx/nginx.conf。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55485726

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档