使用 LetsEncrypt 时,必须每 90 天更新一次证书。每次续订证书时,都必须再次证明证书中包含的域的所有权。
可以通过添加_acme-challengeDNS 记录来做到这一点。是否可以在第一次用于验证时设置此 DNS 记录,并在后续验证中重复使用它,这样就不必在每次需要更新证书时设置新的 DNS 记录?
我有一个虚拟主机,它配置了一些访问限制,如下所示:
<Location "/">
AuthType Basic
AuthName "Restricted Content"
AuthUserFile /var/www/domain/htdocs/.htpasswd
Require valid-user
</Location>
Run Code Online (Sandbox Code Playgroud)
除此之外,我还有以下conf文件:
Alias /.well-known/acme-challenge/ "/var/www/letsencrypt/"
<Location /.well-known/acme-challenge/>
# Security Options
Options None
AllowOverride None
ForceType text/plain
RedirectMatch 404 "^(?!/\.well-known/acme-challenge/[\w-]{43}$)"
# Do not redirect to https or perform other rewrites
RewriteEngine off
</Location>
Run Code Online (Sandbox Code Playgroud)
我需要/.well-known/acme-challenge/无需授权即可访问。
我已经尝试Require all granted向我的conf文件添加不同的变体,但无济于事。
如何让/.well-known/acme-challenge/所有虚拟主机无需身份验证即可访问?(我不想修改任何虚拟主机,这个虚拟主机只是一个例子)。
在 ansible 1.5.4 中,以下命令完美运行:
- name: Generate postfix dhparams
command: "{{ item }}"
with_items:
- openssl gendh -out /etc/postfix/dh_512.pem -2 512 creates=/etc/postfix/dh_512.pem
- openssl gendh -out /etc/postfix/dh_2048.pem -2 2048 creates=/etc/postfix/dh_2048.pem
notify: Reload postfix
Run Code Online (Sandbox Code Playgroud)
升级到 1.9.1 后,命令失败并显示fatal: [127.0.0.1] => A variable inserted a new parameter into the module args. Be sure to quote variables if they contain equal signs (for example: "{{var}}").错误。
正如{{ item }}已经引用的那样,我不知道出了什么问题。
我怎样才能让这个命令再次工作?
当尝试使用 vmkfstools 在 esxi 5 上复制瘦 vmdk 时,如下所示:
vmkfstools -i IPFire-flat.vmdk -d thin IPFire-Template-flat.vmdk
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
DiskLib_Check() 对源磁盘失败。指定的文件不是虚拟磁盘 (15)。
我可以完美地在我的 vm 中使用 vmdk,所以我不完全确定出了什么问题。
我该如何解决?
我有一个这样的字典列表:
list_of_dicts:
- name: Item1
- name: Item2
type: special
- name: Item3
- name: Item4
type: small
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,并非所有项目都有属性type。上下文:如果没有type设置属性,则表示该项目是默认类型。
我想选择所有不属于类型的项目special。
我试过这个:list_of_dicts | rejectattr('type', 'equalto', 'special')
不幸的是,这会失败并出现AnsibleUndefinedVariable: 'dict object' has no attribute 'type'错误,因为某些项目没有类型。
有什么好的方法可以解决这个问题呢?
我的库存如下所示:
db0 ansible_host=10.0.0.1
db1 ansible_host=10.0.0.2
app0 ansible_host=10.0.0.3
app1 ansible_host=10.0.0.4
...
Run Code Online (Sandbox Code Playgroud)
由此,我需要提取这样的列表:
- name: db0
ip: 10.0.0.1
- name: db1
ip: 10.0.0.2
- name: app0
ip: 10.0.0.3
- name: app1
ip: 10.0.0.4
Run Code Online (Sandbox Code Playgroud)
我知道我可以让所有主机使用groups['all'].
我还可以ansible_host使用 获取每个主机的值hostvars['<hostname>']['ansible_host']。
我如何结合它来创建我需要的列表?
即使我的postfix服务器没有认证就无法使用(开放中继),登录后仍然可以像这样以另一个用户名发送邮件:
EHLO domain.org
auth plain eW91IGxpdHRsZSBkaXJ0eSBiYXN0YXJkIDstKQ==
235 2.7.0 Authentication successful
mail from: otheruser@domain.org
250 2.1.0 Ok
rcpt to: recipient@otherdomain.org
250 2.1.5 Ok
data
354 End data with <CR><LF>.<CR><LF>
Please send me your account info.
.
250 2.0.0 Ok: queued as D40692A61AA
quit
Run Code Online (Sandbox Code Playgroud)
如何防止这种情况发生?
我有一个 ESXi 5.1 安装,它不规则地崩溃,错误输出如下:

服务器有以下硬件:
Supermicro X8DTN+ Mainboard
2 x Intel XEON E5606
6 x 2GB ECC DDR3-RAM
LSI 9260-6i Raid5
Run Code Online (Sandbox Code Playgroud)
如何解决这个问题?
我正在尝试替换localhost字符串
$amp_conf['AMPDBHOST'] = 'localhost';
与变量的内容{{ asterisk_db_host }},即172.17.0.3。
虽然
- replace:
dest: /usr/src/freepbx/installlib/installcommand.class.php
regexp: '(\$amp_conf\[.AMPDBHOST.\] = .)localhost(.;)'
replace: '\1\2'
Run Code Online (Sandbox Code Playgroud)
完美的结果
$amp_conf['AMPDBHOST'] = 'localhost';
- replace:
dest: /usr/src/freepbx/installlib/installcommand.class.php
regexp: '(\$amp_conf\[.AMPDBHOST.\] = .)localhost(.;)'
replace: '\1{{ asterisk_db_host }}\2'
Run Code Online (Sandbox Code Playgroud)
也
- replace:
dest: /usr/src/freepbx/installlib/installcommand.class.php
regexp: '(\$amp_conf\[.AMPDBHOST.\] = .)localhost(.;)'
replace: '\1{{ asterisk_db_host|regex_escape() }}\2'
Run Code Online (Sandbox Code Playgroud)
用O2.17.0.2';或替换字符串O2\.17\.0\.2';。
我在这里做错了什么?我该如何正确进行此替换?
ansible ×4
postfix ×2
vmware-esxi ×2
apache-2.4 ×1
apache2 ×1
deployment ×1
jinja2 ×1
lets-encrypt ×1