plinker/nginx

通过plinker RPC控制Nginx作为反向代理

2.2.2 2020-04-09 02:14 UTC

README

本组件的目的是构建Web正向/反向代理到主机上的LXD/LXC容器(或外部上游),而不是作为server{}块配置器。

该组件使用nginx作为反向代理,它依赖于已安装的php7-fpm,并将覆盖/etc/nginx/nginx.conf!所以如果你已经安装了nginx,那么不要使用此组件,因为它很可能会破坏你的东西。

安装

使用以下命令通过composer安装此包

$ composer require plinker/nginx

然后转到./vendor/plinker/nginx/scripts并运行bash install.sh

客户端

创建客户端实例的方法如下

<?php
require 'vendor/autoload.php';

/**
 * Initialize plinker client.
 *
 * @param string $server - URL to server listener.
 * @param string $config - server secret, and/or a additional component data
 */
$client = new \Plinker\Core\Client(
    'http://example.com/server.php',
    [
        'secret' => 'a secret password',
        // database connection
        'database' => [
            'dsn'      => 'sqlite:./.plinker/database.db',
            'host'     => '',
            'name'     => '',
            'username' => '',
            'password' => '',
            'freeze'   => false,
            'debug'    => false,
        ]
    ]
);

// or using global function
$client = plinker_client('http://example.com/server.php', 'a secret password', [
    // database connection
    'database' => [
        'dsn'      => 'sqlite:./.plinker/database.db',
        'host'     => '',
        'name'     => '',
        'username' => '',
        'password' => '',
        'freeze'   => false,
        'debug'    => false,
    ]
]);

方法

设置完成后,您可以通过其命名空间调用类及其方法。

设置

将构建任务应用于plinker/tasks队列。

调用

$client->nginx->setup([
    'build_sleep' => 5,
    'reconcile_sleep' => 5,
]);

响应

更新包

运行composer update以更新包。

调用

$client->nginx->update_package();

响应

添加

添加Web代理规则。

调用

$client->nginx->addBlock([
    'label' => 'My website nginx route',
    'ownDomain' => [
        'example.com',
        'www.example.com'
    ],
    'ownUpstream' => [
        ['ip' => '10.158.250.5', 'port' => '80']
    ],
    'letsencrypt' => 1,
    'enabled' => 1
]);

响应

Array
(
    [status] => success
    [values] => Array
        (
            [id] => 1
            [label] => My website nginx route
            [name] => c094c6c1-0fa1-40f1-af66-60e173e8dbac
            [ssl_type] => letsencrypt
            [added] => 2018-05-13 17:25:51
            [updated] => 2018-05-13 17:25:51
            [has_change] => 1
            [has_error] => 0
            [delete] => 0
            [enabled] => 1
            [update_ip] => 0
            [ip] => 10.158.250.5
            [port] => 80
            [ownDomain] => Array
                (
                    [0] => Array
                        (
                            [id] => 1
                            [name] => example.com
                            [route_id] => 1
                        )

                    [1] => Array
                        (
                            [id] => 2
                            [name] => www.example.com
                            [route_id] => 1
                        )

                )

            [ownUpstream] => Array
                (
                    [0] => Array
                        (
                            [id] => 1
                            [ip] => 10.158.250.5
                            [port] => 80
                            [route_id] => 1
                        )

                )

        )

)

更新块

更新Web代理规则。

调用

client->nginx->update('name = ?', ['b2f78de7-5994-4c21-9c55-76cefe327a67'], [
    'label' => $test_route_label,
    'ownDomain' => [
        'updated-example.com',
        'www.updated-example.com'
    ],
    'ownUpstream' => [
        ['ip' => '10.158.250.5', 'port' => '80']
    ],
    'letsencrypt' => 0,
    'enabled' => 1
]);

响应


Array
(
    [status] => success
    [values] => Array
        (
            [id] => 3
            [label] => Example
            [name] => b2f78de7-5994-4c21-9c55-76cefe327a67
            [ssl_type] => 
            [added] => 2018-05-12 20:17:09
            [updated] => 2018-05-13 17:28:50
            [has_change] => 1
            [has_error] => 1
            [delete] => 0
            [enabled] => 1
            [update_ip] => 0
            [ip] => 10.158.250.5
            [port] => 80
            [error] => {}
            [ownDomain] => Array
                (
                    [0] => Array
                        (
                            [id] => 9
                            [name] => updated-example.com
                            [route_id] => 3
                        )

                    [1] => Array
                        (
                            [id] => 10
                            [name] => www.updated-example.com
                            [route_id] => 3
                        )

                )

            [ownUpstream] => Array
                (
                    [0] => Array
                        (
                            [id] => 5
                            [ip] => 10.158.250.5
                            [port] => 80
                            [route_id] => 3
                        )

                )

        )

)

删除

删除Web代理规则。

调用

ruleById(1)   - $client->nginx->remove('id = ?', [1]);
ruleByName(1) - $client->nginx->remove('name = ?', ['guidV4-value'])

响应

Array
(
    [status] => success
)

重置

删除所有Web代理规则。

调用

$client->nginx->reset();     // remove just rules
$client->nginx->reset(true); // remove rules and tasks (purge)

响应

Array
(
    [status] => success
)

获取

从数据库中获取当前配置的Web代理规则。

调用

all           - $client->nginx->fetch();
ruleById(1)   - $client->nginx->fetch('id = ?', [1]);
ruleByName(1) - $client->nginx->fetch('name = ?', ['guidV4-value'])

响应

Array
(
    [0] => Array
        (
            [id] => 1
            [label] => Example
            [name] => 9801e216-a663-4f21-a3f5-047be2b3b9c9
            [ssl_type] => 
            [added] => 2018-05-12 19:52:58
            [updated] => 2018-05-12 19:52:58
            [has_change] => 0
            [has_error] => 0
            [delete] => 0
            [enabled] => 1
            [update_ip] => 0
            [ip] => 10.158.250.5
            [port] => 80
            [error] => 
            [ownDomain] => Array
                (
                    [0] => Array
                        (
                            [id] => 1
                            [name] => example.com
                            [route_id] => 2
                        )

                    [1] => Array
                        (
                            [id] => 2
                            [name] => www.example.com
                            [route_id] => 2
                        )

                )

            [ownUpstream] => Array
                (
                    [0] => Array
                        (
                            [id] => 1
                            [ip] => 10.158.250.5
                            [port] => 80
                            [route_id] => 2
                        )

                )

        )
)

计数

从数据库中获取当前配置的Web代理规则的计数。

调用

all           - $client->nginx->count();
ruleById(1)   - $client->nginx->count('id = ?', [1]);
ruleByName(1) - $client->nginx->count('name = ?', ['guidV4-value'])

响应

1

重建

重建Web代理规则。

调用

ruleById(1)   - $client->nginx->rebuild('id = ?', [1]);
ruleByName(1) - $client->nginx->rebuild('name = ?', ['guidV4-value'])

响应

Array
(
    [status] => success
)

状态

列举并返回nginx连接的状态。

调用

$client->nginx->status();

响应

Array
(
    [active_connections] => 2
    [accepts] => 579
    [handled] => 579
    [requests] => 579
    [reading] => 0
    [writing] => 2
    [waiting] => 0
)

测试

此组件未设置任何测试。

贡献

请参阅CONTRIBUTING以获取详细信息。

安全

如果您发现任何安全相关的问题,请通过https://cherone.co.uk与我联系,而不是使用问题跟踪器。

致谢

开发鼓励

如果您使用此项目并从中获利或想要表达感谢,请随时捐款https://www.paypal.me/lcherone,谢谢。

赞助商

让您的公司或姓名在文档中以及每个GitHub存储库中列出,有关更多信息,请联系我https://cherone.co.uk

许可

MIT许可证(MIT)。有关更多信息,请参阅许可文件

请参阅组织页面以获取更多组件。