这是一个关于在同一 IP 上托管多个 SSL 网站的规范问题。
我的印象是每个 SSL 证书都需要它自己唯一的 IP 地址/端口组合。但是我之前发布的一个问题的答案与这个说法不一致。
使用来自该问题的信息,我能够获得多个 SSL 证书以在相同的 IP 地址和端口 443 上工作。鉴于上述假设,我很困惑为什么这有效,并得到其他人的强化,即每个 SSL 域网站上的同一台服务器需要自己的 IP/端口。
我怀疑我做错了什么。可以这样使用多个 SSL 证书吗?
我有以下配置:
SSLEngine on
SSLCertificateFile /etc/httpd/conf/login.domain.com.crt
SSLCertificateKeyFile /etc/httpd/conf/login.domain.com.key
SSLCipherSuite ALL:-ADH:+HIGH:+MEDIUM:-LOW:-SSLv2:-EXP
Run Code Online (Sandbox Code Playgroud)
但我不知道如何生成.crt
和.key
文件。
如果我有 3 个域,domain1.com、domain2.com 和 domain3.com,是否可以为未列出的域设置默认虚拟主机?例如,如果我有:
<VirtualHost 192.168.1.2 204.255.176.199>
DocumentRoot /www/docs/domain1
ServerName domain1
ServerAlias host
</VirtualHost>
<VirtualHost 192.168.1.2 204.255.176.199>
DocumentRoot /www/docs/domain2
ServerName domain2
ServerAlias host
</VirtualHost>
<VirtualHost 192.168.1.2 204.255.176.199>
DocumentRoot /www/docs/everythingelse
ServerName *
ServerAlias host
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
如果您注册一个域并将其指向我的服务器,它将默认显示与域 3 相同的所有其他内容。那可能吗?
我有一个带有 Apache 的专用服务器,我在上面设置了一些 VirtualHosts。我已经设置了一个来处理 www 域以及非 www 域。
我的 www 的 VH .conf 文件:
<VirtualHost *>
DocumentRoot /var/www/site
ServerName www.example.com
<Directory "/var/www/site">
allow from all
</Directory>
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
有了这个.htaccess
:
RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_HOST} ^www.example.com [NC]
RewriteRule ^(.*)$ http://example.com/$1 [L,R=301]
Run Code Online (Sandbox Code Playgroud)
有没有一种简单的方法可以将 www 重定向到非 www 版本?目前我将两个版本发送到同一个DocumentRoot
并使用,.htaccess
但我确定我必须能够在 VirtualHost 文件中做到这一点。
在 Ubuntu 上的 Apache 中,我设置了一个虚拟主机,但在浏览器中我不断收到“403 禁止访问”错误;日志显示“客户端被服务器配置拒绝:/home/remix/ ”。
在网上寻找解决方案时,我发现了很多关于目录访问的帖子(全部允许等),但据我所知,我已经这样做了。在httpd-vhosts.conf 中有以下代码:
NameVirtualHost *:80
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host.example.com
DocumentRoot "/opt/lampp/htdocs/"
ServerName localhost
ServerAlias localhost
ErrorLog "logs/dummy-host.example.com-error_log"
CustomLog "logs/dummy-host.example.com-access_log" common
</VirtualHost>
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot "/home/remix/"
ServerName testproject
ServerAlias testproject
<Directory "/home/remix/">
Options Indexes FollowSymLinks Includes ExecCGI
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
我也添加了
127.0.0.1 testproject
Run Code Online (Sandbox Code Playgroud)
到 /etc/hosts 文件。
此外,/home/remix/ 文件夹包含一个 index.html 文件,并且在 httpd.conf 中启用了 vhost。
有什么我没有看到的吗?
编辑:这是 Apache error_log 条目:
[Sat Aug 18 09:15:32.666938 2012] …
Run Code Online (Sandbox Code Playgroud) 我有一个 nginx 服务器,为近六个不同的网站提供服务。它运行在刚刚获得 IPv6 本机支持(达拉斯数据中心)的 Linode 上,我正在尝试将我的大部分站点配置为双栈操作。我使用 IPv6-only 子域启动并运行了第一个,如下所示:
server {
listen [::]:80 ipv6only=on;
listen 80;
server_name example.com ipv6.example.com;
root /var/www/example.com/htdocs;
#More stuff, including PHP, WordPress
}
Run Code Online (Sandbox Code Playgroud)
这很有效——example.com 仅支持 IPv4(目前),而 ipv6.example.com 仅支持 IPv6(主要用于测试目的)。我可以ping6 ipv6.example.com
,甚至wget ipv6.example.com
没有流汗 - 这一切都令人愉快地无痛(在通过 nginx 绑定虚拟主机的方式找到“问题”之后,需要ipv6only=on
参数和双重listen
指令)。
但是,我现在正在尝试扩展它以支持我的其他域,从 static.example.com 开始;但是,当我采用与上述相同的方法时(双重listen
指令,包括ipv6only=on
参数),在重新启动 nginx 时出现以下错误:
* Starting Nginx Server...
nginx: [emerg] a duplicate listen options for [::]:80 in /etc/nginx/sites-enabled/example.com.conf:3
Run Code Online (Sandbox Code Playgroud)
似乎 nginx 绑定 IPv6 的方法不允许基于名称的虚拟主机?我是否必须从我的主机获取额外的 IPv6 地址(不是问题)并在 IPv6 上使用基于 IP …
我想知道VirtualHost Context 中“ default :*” 和 “*:*”之间的区别。
<VirtualHost _default_:*>
#...
ServerName host.example.com
#...
</VirtualHost>
<VirtualHost *:*>
#...
ServerName host.example.com
#...
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
我不知道区别和用途。
thk
我正在尝试在 Mac OS X 上设置虚拟主机。我一直在修改 httpd.conf 并重新启动服务器,但没有让它正常工作。此外,我注意到它不在 httpd.conf (Libraries/WebServer/Documents) 中提到的 DocumentRoot 中提供文件,而是在不同的目录 (/usr/local/apache2/htdocs) 中提供文件。我在 httpd.conf 中的任何地方都没有看到这个文件夹。此外,PHP 可以工作,但“LoadModule php5_module”行被注释掉了。这让我觉得它在使用另一个 .conf 文件。如何确定实际加载了哪个配置?
更新:我刚刚删除了 httpd.conf 和 apache 在重启后的行为相同,所以它肯定没有使用它!
我需要在 Apache 上设置我的 VirtualHost 以在 http 和 https 上提供服务(使用标准端口)
如果我启用 SSL 引擎(如下所示) - 在端口 80 上出现错误。
原因是,站点的某些部分需要 SSL,但其他部分不需要。我怎样才能在网站上同时提供 http + https 服务?
这是我的虚拟主机文件....
NameVirtualHost *
<VirtualHost *>
ServerAdmin webmaster@localhost
ServerName mysite.co.uk
DocumentRoot /var/www/mysite/public
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/mysite/public>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ErrorLog /var/log/apache2/error.log
# Possible values include: debug, info, notice, …
Run Code Online (Sandbox Code Playgroud) 为同一个 VirtualHosts 声明多个端口:
SSLStrictSNIVHostCheck off
# Apache setup which will listen for and accept SSL connections on port 443.
Listen 443
# Listen for virtual host requests on all IP addresses
NameVirtualHost *:443
<VirtualHost *:443>
ServerName domain.localhost
DocumentRoot "/Users/<my_user_name>/Sites/domain/public"
<Directory "/Users/<my_user_name>/Sites/domain/public">
Order allow,deny
Allow from all
</Directory>
# SSL Configuration
SSLEngine on
...
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
如何为“domain.localhost”声明一个新端口(“listen”、ServerName、...)?
如果我添加以下代码,apache 也适用于(太多)'domain.localhost' 的所有其他子域(subdomain1.domain.localhost、subdomain2.domain.localhost,...):
<VirtualHost *:80>
ServerName pjtmain.localhost:80
DocumentRoot "/Users/Toto85/Sites/pjtmain/public"
RackEnv development
<Directory "/Users/Toto85/Sites/pjtmain/public">
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
Run Code Online (Sandbox Code Playgroud) virtualhost ×10
apache-2.2 ×8
ssl ×3
httpd.conf ×2
http ×1
httpd ×1
https ×1
ipv6 ×1
java ×1
linux ×1
mac-osx ×1
mod-rewrite ×1
nginx ×1
port ×1
redirect ×1
sni ×1
tomcat ×1
ubuntu ×1