我完全不了解 GlusterFS 探针。看,我将所有服务器添加到 /etc/hosts 文件,我为每台服务器执行此操作。假设我有 100 台服务器,后来我又增加了 100 台。我无法想象更新所有 200 个服务器的主机文件以供查看。
我在这里错过了什么吗?如何在不修改每个服务器主机文件的情况下轻松添加更多服务器?
我应该使用私有 LAN 并使用 IP 地址而不是主机名吗?这行得通吗?
卡在这一点...
我完全不了解 GlusterFS 探针。看,我将所有服务器添加到 /etc/hosts 文件,我为每台服务器执行此操作。假设我有 100 台服务器,后来我又增加了 100 台。我无法想象更新所有 200 个服务器的主机文件以供查看。
我在这里错过了什么吗?如何在不修改每个服务器主机文件的情况下轻松添加更多服务器?
我应该使用私有 LAN 并使用 IP 地址而不是主机名吗?这行得通吗?
卡在这一点...
我不要求比较。我已经知道 PostgreSQL 和 MariaDB 是什么以及它们的区别。
我正在从另一个角度看待这个问题。像Facebook这样的公司使用MySQL(当然打了补丁),但他们如何处理数百万个请求呢?
更清楚; PostgreSQL有PgPool工具,可以为每个人缓存和重用当前连接,因为客户端数据是相同的。因此,当PHP应用程序连接到 PgPool 10.000 次时,它实际上使用的连接很少。这使得数百万用户可以同时使用 PostgreSQL 而不会max connection
出错。
但是在 MariaDB/MySQL 上有一个max_connection
设置点指向150
. 这是否意味着只有 150 个客户端可以从同一个 PHP 网页连接到 MariaDB/MySQL?例如,我应该如何处理从 PHP 到 MariaDB 的数百万个请求?如果有200 万用户同时登录我的网站,我的网站会max_connection
怎样150
?或者,更好的是,有没有像 PgPool 这样的 MariaDB 等价物?
在这种情况下我会应用什么样的场景?
我可以用 TLS 连接我的postfix 服务器。所有的东西都设置好了。但是,当我使用此安全连接发送消息时,目标服务器(例如 gmail)会在没有 TLS/SSL 安全连接的情况下收到我的消息。
如果我使用另一台具有 cpanel 的服务器,Gmail 会通过 ESMTP S接收该消息。但是当我向 gmail 帐户发送消息时,它由 ESMTP 接收(不使用 TLS 连接。)
真诚地,我发现我的 postfix 服务器没有通过 SSL/TLS 加密连接与目标进行协商。
http://www.checktls.com报告您的电子邮件已发送,但未使用 TLS 安全发送。
但是为什么我能够通过 TLS 连接我的服务器,但服务器无法通过安全连接发送它?
这是配置文件:
myhostname = **hidden**
myorigin = /etc/mailname
mynetworks_style = host
mydestination = domains here...
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
mailbox_size_limit = 0
message_size_limit = 104857600
mailbox_transport = lmtp:unix:private/dovecot-lmtp
virtual_transport = lmtp:unix:private/dovecot-lmtp
smtpd_tls_cert_file = /etc/ssl/certs/postfix.pem
smtpd_tls_key_file = /etc/ssl/private/postfix.pem
smtpd_use_tls = yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_tls_security_level=encrypt
smtpd_tls_protocols = !SSLv2, !SSLv3
smtp_dns_support_level = enabled
smtp_tls_loglevel = 1
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
# and the common settings to enable SASL:
smtpd_sasl_auth_enable = yes
# With Postfix version before 2.10, use smtpd_recipient_restrictions
smtpd_relay_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
smtpd_recipient_restrictions = permit_mynetworks permit_inet_interfaces
append_dot_mydomain = no
readme_directory = no
smtpd_milters = inet:127.0.0.1:8891
non_smtpd_milters = $smtpd_milters
milter_default_action = accept
milter_protocol = 2
canonical_classes = header_recipient
smtp inet n - - - - smtpd
#submission inet n - - - - smtpd
# -o cleanup_service_name=subcleanup
# -o smtpd_tls_security_level=encrypt
# -o smtpd_sasl_auth_enable=yes
# -o smtpd_client_restrictions=permit_sasl_authenticated,reject
# -o milter_macro_daemon_name=ORIGINATING
submission inet n - n - - smtpd
-o syslog_name=postfix/submission
-o smtpd_tls_wrappermode=yes
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
-o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject
-o milter_macro_daemon_name=ORIGINATING
-o smtpd_sasl_type=dovecot
-o smtpd_sasl_path=private/auth
smtps inet n - - - - smtpd
-o syslog_name=postfix/submission
-o smtpd_tls_wrappermode=yes
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
-o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject
-o milter_macro_daemon_name=ORIGINATING
-o smtpd_sasl_type=dovecot
-o smtpd_sasl_path=private/auth
我有这个包罗万象:
server {
listen 80 default_server;
server_name _;
return 444;
}
现在,假设我们有两个名为1.2.3.4
和的 IP 1.2.3.5
。
好吧,假设在配置文件中的任何地方1.2.3.4
使用example.com
并且1.2.3.5
从未使用过。基本上只有第一个 IP 在使用中。其他 IP 为空白/空/免费。
好吧,问题来了。上面的服务器块正在使用1.2.3.5
. 因为此 IP 从未与任何服务器块一起使用。这是免费的。分配给服务器。它回应。但从未用于任何网站。listen 80;
指令仅适用于1.2.3.5
.
另一方面,1.2.3.4
是行不通的。Nginx 不监听这个 IP。因为它被另一个服务器块使用。我测试了自己。Indded,Nginx 拒绝监听这个正在被 ngnix 服务器块使用的 Ips
现在,如果我更改listen 80;
为listen 1.2.3.4:80
然后它正在为该 IP 工作。
基本上, Nginx不允许我为默认的包罗万象监听使用过的 IP 地址。
我只想捕获进入我的服务器的每一个不属于我的假域。我想通过假主机禁用用户。但是我真的需要编写每个 IP 来监听吗?
有什么解决方法吗?有什么帮助吗?
编辑 1:我也试过listen *:80;
有通配符。也没有用。
编辑 2:如果我从 listen 指令中删除所有 IP 并只保留端口,它就可以工作。但是我们不是把 ip 地址放在 listen 指令上吗?Nginx 示例始终只显示侦听端口。我怀疑哪个是正确的。ip:端口或仅端口。
除 example.com 外,其他网站均因 444 错误而被拒绝。
server {
listen 1.2.3.4:80 default_server;
server_name _;
return 444;
}
server {
listen 1.2.3.4:80;
server_name example.com;
root /www
}
仍然接受 example.com 以外的假主机
server {
listen 80 default_server;
server_name _;
return 444;
}
server {
listen 1.2.3.4:80;
server_name example.com;
root /www
}
在 Nathan 的评论之后,我深入研究了这个问题并发现了这一行:
default_server 参数(如果存在)将使服务器成为指定地址:端口对的默认服务器。
基本上,正如 Nathan 所说,它将看起来是最高 IP,并且该服务器块仅在该级别可用。为此,您必须指定每个 IP。所以,我们有两个选择。
listen 80;
指令和参数,您可以为端口定义一个默认服务器80
listen ip:80
和定义每个地址自己的默认服务器。另一个伟大的标语:
在此配置中,nginx 首先根据服务器块的侦听指令测试请求的 IP 地址和端口。然后,它根据与 IP 地址和端口匹配的服务器块的 server_name 条目测试请求的“主机”标头字段。如果找不到服务器名称,则请求将由默认服务器处理。例如,在 192.168.1.1:80 端口上收到的对 www.example.com 的请求将由 192.168.1.1:80 端口的默认服务器处理,即由第一个服务器处理,因为没有 www.example为此端口定义的 .com。