初探 OpenResty

初玩 OpenResty,安装、配置、初始化、添加到服务,重启…

官网

OpenResty

介绍

OpenResty® 是一款基于 NGINX 和 LuaJIT 的 Web 平台。

OpenResty 与 Tengine 区别

openresty与tengine的区别:
OpenResty是Nginx的Bundle,与官方的最新版本是同步的

Tengine则是Nginx 1.6.2版本的Fork, 阿里根据自己的业务情况对nginx进行了一些定制开发

安装

Mac

$ brew install openresty/brew/openresty

如果你之前是从 homebrew/nginx 安装的 OpenResty,请先执行:

$ brew untap homebrew/nginx

Linux

安装前准备:

$ apt-get install libpcre3-dev \
    libssl-dev perl make build-essential curl

下载构建 OpenResty

从下载页 download下载最新的 OpenResty® 源码包,并且像下面的示例一样将其解压:

$ tar -xzvf openresty-VERSION.tar.gz

VERSION 的地方替换成您下载的源码包的版本号,比如说 0.8.54.6。

./configure

$ ./configure

然后在进入 openresty-VERSION/ 目录, 然后输入以下命令配置:

./configure

默认, --prefix=/usr/local/openresty 程序会被安装到 /usr/local/openresty 目录。

Make

您可以使用下面的命令来编译:

$ make

$ make -j2

如果前面的步骤都没有问题的话,您可以使用下面的命令安装 OpenResty 到您的系统中:

$ make install

Linux 添加源安装

http://openresty.org/cn/linux-packages.html#ubuntu

Windows

启动服务

  • 配置环境变量
PATH=/usr/local/openresty/nginx/sbin:$PATH
export PATH
  • 启动服务
$ nginx -p `pwd`/ -c conf/nginx.conf
  • 使用nginx 的配置启动服务
$ /usr/local/openresty/nginx/sbin/nginx -c /etc/nginx/nginx.conf

参考

  • https://blog.csdn.net/yuanfangPOET/article/details/90646154

[待解决] gRPC 访问 Nginx 时 access_log nginx PRI * HTTP/2.0

gRPC 访问 Nginx 时 access_log nginx PRI * HTTP/2.0 怎么调整策略呢

nginx PRI * HTTP/2.0

问题

通过Nginx 代理 gRPC 服务,其他 client 通过 Nginx 访问后端服务时,后端的 gRPC服务没收到任何请求,发现access_log 是如下信息:

10.0.2.2 - - [24/Sep/2000:08:14:31 +0000] "PRI * HTTP/2.0" 400 173 "-" "-"

检查你的 nginx/conf.d/grpc_proxy.conf 是这样的:

server
{

    listen 443 ssl http2;
    server_name _;
    index index.php index.html index.htm;
    root  /usr/share/nginx/html/;

    ssl                     on;
    ssl_certificate         /etc/nginx/cert/server.pem;
    ssl_certificate_key     /etc/nginx/cert/server.key;
    ssl_session_timeout     5m;
    ssl_protocols           TLSv1.2;

    ssl_prefer_server_ciphers on;
    ssl_ciphers 'ECDHE-RSA-AES2...';

    location / {
        proxy_http_version  1.1;
        proxy_set_header    Upgrade $http_upgrade;
        proxy_set_header    Connection "keep-alive";
        proxy_set_header    X-Real-IP $remote_addr;

        if (!-f $request_filename) {
             proxy_pass http://127.0.0.1:8080;
        }
    }

解决否

已解决

方案

我估计你的证书没有被信任,你可以去掉证书试试, 调整后的 nginx/conf.d/grpc_proxy.conf 的配置如下

server
{
    listen 443 http2;

    root  /usr/share/nginx/html/;

    access_log  /var/log/nginx/access_grpc_proxy.log;
    error_log /var/log/nginx/error_grpc_proxy.log;

    location / {
        # Replace localhost:50051 with the address and port of your gRPC server
        # The 'grpc://' prefix is optional; unencrypted gRPC is the default

        # grpc_pass grpc://127.0.0.1:8080;
        proxy_pass http://127.0.0.1:8080;
    }
}

这里我们去掉了nginx的ssl封装。这样就好了。

client 证书

或者你检查下 gRPC client 是否使用了正确的证书,nginx 拦截了流量没到proxy端,估计就是请求认证有问题。

参考

  • https://www.nginx.com/blog/nginx-1-13-10-grpc/