在解压并启动 keycloak 以侦听 127.0.0.1 后,我将 nginx 配置为可通过 https 从公共可用域访问的反向代理。
这是nginx配置:
http
{
server_tokens off;
upstream keycloak { ip_hash; server 127.0.0.1:8080; }
server
{
server_name name.domain.tld;
listen 443 ssl http2; # managed by Certbot
ssl_certificate /path/to/cert; # managed by Certbot
ssl_certificate_key /path/to/key; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
location /
{
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
add_header Access-Control-Allow-Origin *;
proxy_pass http://keycloak;
}
}
server …Run Code Online (Sandbox Code Playgroud) 我有一个在 Windows Server 2019 上配置的活动目录,我可以在同一台服务器上配置 VPN 吗?
当使用 nginx 作为上游块中一组服务器的反向代理时,是否有一个变量与未解析的服务器名称相对应?例如,考虑以下配置:
http {
upstream foo {
server foo1.example.com:8080;
server foo1.example.com:8081;
server foo2.example.com:8080;
server foo2.example.com:8081;
}
server {
server_name foo.example.com;
location / {
proxy_pass http://foo;
}
}
}
Run Code Online (Sandbox Code Playgroud)
令foo.example.com、foo1.example.com、 和foo2.example.com分别为解析为 192.0.2.1、192.0.2.2 和 192.0.2.3 的定义名称。
假设有一个请求进来foo.example.com,nginx决定选择foo2.example.com8080端口作为上游服务器,请求成功。然后,据我所知,这些将是一些相关变量的值:
$host = foo.example.com$proxy_host = foo$upstream_addr = 192.0.2.3:8080(*)但是,这些值都不与上游服务器配置中给定的值匹配。foo2.example.com:8080因此,更具体地说,我的问题是:在这种情况下哪个变量(如果有)的值为?
为了避免 XY 问题,这些是我试图完成的事情:
map上游服务器到另一条更有用的信息,也用于日志记录目的proxy_ssl_name)(这可能会产生一个自己的问题,但这不是唯一的用例)(*) = 该变量$upstream_addr …
我希望能够在 2 个单独的文件中指定密钥,一个是用户控制的,另一个是由工具自动生成的。
我怎样才能做到这样一个文件~/.ssh/authorized_keys_generated也能在登录时检查密钥?
我的用例:我在 M.2 SSD 上安装了 Ubuntu Server 18.04。我有一个 4TB 硬盘,我想添加为存储。由于它主要用于大型媒体文件和备份,因此不会经常写入。
您认为哪种文件系统最适合此用例?
我的主要候选者是 Ext3/4、XFS、Btrfs 和 ZFS(随意争论另一个)。
我不是在问“什么是最好的文件系统?”——没有“最好的”这样的东西。 我只是问人们哪个文件系统可能最适合这个用例。请尝试包括:
谢谢你的建议。
我有一本 Ansible 剧本,其中包含一项很长的任务,长达一小时。
非常简化,看起来像:
- hosts: localhost
tasks:
- name: Short task
debug:
msg: "I'm quick!"
- name: Long task
shell: "sleep 15s"
Run Code Online (Sandbox Code Playgroud)
当用户运行剧本时,输出首先是:
PLAY [localhost] ********************
TASK [Gathering Facts] **************
ok: [127.0.0.1]
TASK [Short task] *******************
ok: [127.0.0.1] => {
"msg": "I'm quick!"
}
(hang there until Long task is done)
TASK [Long task] ********************
changed: [127.0.0.1]
Run Code Online (Sandbox Code Playgroud)
该剧本的最终用户认为存在问题,Short task因为它挂在那里,而这Long task正是导致延迟的原因。
我如何配置 ansible 或 playbook 以在执行任务name: 之前打印定义的标头?
我要实现的是这样的输出:
PLAY [localhost] ********************
TASK …Run Code Online (Sandbox Code Playgroud) 在 Nginx(撰写本文时为 1.14.1)中给出一个简单的 HTTP 基本身份验证设置,如下所示:
server {
...
location / {
auth basic "HTTP Auth Required";
auth basic user file "/path/to/htpasswd";
}
}
Run Code Online (Sandbox Code Playgroud)
...如何对失败的登录尝试应用速率限制?例如,如果 30 秒内有 10 次登录尝试失败,我想阻止该源 IP 在一个小时内访问该网站。我希望利用limit_req_zone和 相关指令,但找不到一种方法来连接请求的身份验证状态。
这在 HAproxy 中相当简单,使用棒表和 ACL,使用类似以下工作示例的内容。
userlist users
user me password s3cr3t
frontend https.local
...
# Set up the stick table to track our source IPs, both IPv4 & IPv6
stick-table type ipv6 size 100k expire 1h store http_req_rate(30s)
# Check if the user has authenticated
acl auth_ok http_auth(users) …Run Code Online (Sandbox Code Playgroud) 我正在尝试启动一个 Keycloak 实例,它使用自定义 mysql 数据库而不是嵌入式 H2。
由于我打算使用docker,所以我为Keyclock docker创建了一个网络来与mysql通信。
docker网络创建keycloak网络
接下来,使用以下命令启动 mysql 的 docker 实例。
sudo docker run --name mysql-container --net keycloak-network -v /home/renju/opt/EXONERATE/DB/mysql-data-5-7:/var/lib/mysql -e MYSQL_DATABASE=keycloak -e MYSQL_USER =ku -e MYSQL_PASSWORD=kupw -e MYSQL_ROOT_PASSWORD=myrootpw -d -p 3306:3306 mysql:5.7
我期望 keycloak使用用户名ku和密码kupw访问数据库keycloak。我确保数据库和用户都是在 mysql 中创建的。
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| keycloak |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)
mysql> select * from …Run Code Online (Sandbox Code Playgroud) 我想使用libvirt网络NAT配置。
libvirt 说https://wiki.libvirt.org/page/Virtual_network_%22default%22_has_not_been_started:
“1) 如果您实际上并未在物理机上使用 dnsmasq 来为物理网络提供 DHCP 服务,则应该完全禁用 dnsmasq”
这与我的上下文相对应,因此我在主机系统中停止并禁用 dnsmasq。
在qemu系统中:
virsh # net-edit default
<network>
<name>default</name>
<uuid>b6ef8506-d4c7-4bba-9fe7-8f971ea87d10</uuid>
<forward mode='nat'>
<nat>
<port start='1024' end='65535'/>
</nat>
</forward>
<bridge name='virbr0' stp='on' delay='0'/>
<mac address='52:54:00:06:86:de'/>
<domain name='circus.net'/>
<ip address='192.168.122.1' netmask='255.255.255.0'>
<dhcp>
<range start='192.168.122.2' end='192.168.122.10'/>
</dhcp>
</ip>
</network>
Run Code Online (Sandbox Code Playgroud)
我启动默认网络:
virsh # net-start default
Network default started
virsh # net-list
Name State Autostart Persistent
----------------------------------------------------------
default active no yes
Run Code Online (Sandbox Code Playgroud)
我启动客人S0和S1
virsh # start S0
Domain S0 started
virsh # …Run Code Online (Sandbox Code Playgroud)