首页 > 解决方案 > amzn2 和 nginx 流配置

问题描述

我正在尝试让 nginx 流在 amzn2 图像上工作。当您第一次尝试安装 nginx 时,图像会将您定向到

sudo amazon-linux-extras install nginx1

很好,我不介意使用他们的包,如果它可以工作,而且看起来它是一个足够晚的版本(1.20.0)。

它看起来也有流模块..

[root@ip-10-0-1-43 nginx]# yum list | grep nginx
nginx.x86_64                           1:1.20.0-2.amzn2.0.3          @amzn2extra-nginx1
nginx-filesystem.noarch                1:1.20.0-2.amzn2.0.3          @amzn2extra-nginx1
collectd-nginx.x86_64                  5.8.1-1.amzn2.0.1             amzn2extra-collectd
nginx-all-modules.noarch               1:1.20.0-2.amzn2.0.3          amzn2extra nginx1
nginx-mod-http-geoip.x86_64            1:1.20.0-2.amzn2.0.3          amzn2extra nginx1
nginx-mod-http-image-filter.x86_64     1:1.20.0-2.amzn2.0.3          amzn2extra nginx1
nginx-mod-http-perl.x86_64             1:1.20.0-2.amzn2.0.3          amzn2extra nginx1
nginx-mod-http-xslt-filter.x86_64      1:1.20.0-2.amzn2.0.3          amzn2extra nginx1
nginx-mod-mail.x86_64                  1:1.20.0-2.amzn2.0.3          amzn2extra nginx1
nginx-mod-stream.x86_64                1:1.20.0-2.amzn2.0.3          amzn2extra nginx1
pcp-pmda-nginx.x86_64                  4.3.2-12.amzn2.0.1            amzn2-core
[root@ip-10-0-1-43 nginx]#

我使用了默认的 nginx.conf 文件并将其修改为在没有流的情况下像我想要的那样工作,然后尝试添加流指令,但我继续收到错误。

[root@ip-10-0-1-43 nginx]# nginx -t
nginx: [emerg] unknown directive "stream" in /etc/nginx/nginx.conf:58
nginx: configuration file /etc/nginx/nginx.conf test failed

这是我的 nginx.conf 文件,在没有流部分的情况下可以正常工作,但我需要它通过 ssl 连接并让端口 82 也使用 ssl。如果没有流,我会得到 82 未加密的流量。

# For more information on configuration, see:
#   * Official English Documentation: http://nginx.org/en/docs/
#   * Official Russian Documentation: http://nginx.org/ru/docs/

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

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

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 4096;

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

    # Load modular configuration files from the /etc/nginx/conf.d directory.
    # See http://nginx.org/en/docs/ngx_core_module.html#include
    # for more information.
    include /etc/nginx/conf.d/*.conf;

#    server {
#        listen       80;
#        listen       [::]:80;
#        server_name  _;
#        root         /usr/share/nginx/html;
#
#        # Load configuration files for the default server block.
#        include /etc/nginx/default.d/*.conf;
#
#        error_page 404 /404.html;
#        location = /404.html {
#        }
#
#        error_page 500 502 503 504 /50x.html;
#        location = /50x.html {
#        }
#    }

# Settings for a TLS enabled server.
#
}
stream {
    server {
        listen       443;

        ssl_certificate         /var/cert/nginx.crt;
        ssl_certificate_key     /var/cert/nginx.key;
        ssl_session_cache shared:SSL:1m;
        ssl_session_timeout  10m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        # reverse proxy
        proxy_pass           127.0.0.1:82;
        proxy_buffer_size    16k;

    }

}

我正准备推销这个 amazon-linux-extras 版本的 nginx 并从源代码编译,但鉴于流模块看起来已经安装,必须有办法让它工作。我试过查看 load_module,但找不到流库文件。我在 /usr/lib64/nginx/modules 中找到了它们的文件夹,但它是空的。

标签: nginxstream

解决方案


您仍然必须安装流模块。

yum install nginx-mod-stream

一旦你这样做了,/usr/lib64/nginx/modules 中就有库,并且流指令将在没有对 nginx.conf 文件进行其他更改的情况下工作。


推荐阅读