我有一个新的 Ubuntu 14.04 安装,并采取以下步骤:
- Apache2 2.4.7
- MariaDB 最新稳定版本
- PHP 7.0.9(及多个模块)
- 配置 Apache 以与 PHP7-FPM 配合使用 *
- mod_rpaf 与 Apache2 协同工作**
- PHPMyAdmin 4.6.3 与 PHP7.0.9 正常工作。
- WordPress 4.6***
- Varnish 4.0
NginX 1.10.1,SSL 证书位于 /etc/nginx/ssl
和 ** -> 问题发生在这些配置之前和之后 *** -> wp-config.php 有强制 SSL 登录和 SSL 管理的代码。两者只在 Apache/Varnish 下工作正常。为 Apache 制作 SSL 证书,如果 Apache 设置为监听端口 443,则一切正常。
这是我的 /etc/apache2/ports.conf:
#NameVirtualHost 192.168.1.86
ServerName 192.168.1.86
Listen 8080
#<IfModule ssl_module>
# Listen 443
#</IfModule>
#<IfModule mod_gnutls.c>
# Listen 443
#</IfModule>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
这是我的 /etc/apache2/sites-available/000-default.conf:
<IfModule mod_fastcgi.c>
AddHandler php7-fcgi-www-data .php
Action php7-fcgi-www-data /php7-fcgi-www-data
Alias /php7-fcgi-www-data /usr/lib/cgi-bin/php7-fcgi-www-data
FastCgiExternalServer /usr/lib/cgi-bin/php7-fcgi-www-data -socket /run/php/php7.0-fpm.www-data.sock -pass-header Authorization
<Directory "/usr/lib/cgi-bin">
Require all granted
</Directory>
<FilesMatch ".+\.ph(p[345]?|t|tml)$">
SetHandler php7-fcgi-www-data
</FilesMatch>
</IfModule>
<VirtualHost *:8080>
ServerAdmin [email protected]
DocumentRoot /var/www/html
ServerName 192.168.1.86
<Directory /var/www/html/>
AllowOverride All
</Directory>
Alias /phpmyadmin "/usr/share/phpmyadmin/"
<Directory "/usr/share/phpmyadmin/">
Order allow,deny
Allow from all
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
这是我的 /etc/varnish/default.vcl 中的“后端”部分:
backend default {
.host = "192.168.1.86";
.port = "8080";
}
这是我的 /etc/default/varnish 中的内容:
DAEMON_OPTS="-a :80 \
-T localhost:6082 \
-f /etc/varnish/default.vcl \
-S /etc/varnish/secret \
-s malloc,256m"
这是我的/etc/nginx/sites-available/default:
server {
listen 443 ssl;
server_name 192.168.1.86;
ssl_certificate /etc/nginx/ssl/nginx.crt;
ssl_certificate_key /etc/nginx/ssl/nginx.key;
location / {
proxy_pass http://192.168.1.86:80;
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 https;
proxy_set_header X-Forwarded-Port 443;
proxy_set_header Host $host;
}
}
- /etc/nginx/nginx.conf 中没有端口 80 的踪迹。
- /etc/apache2/sites-available/000-default.conf 与 sites-enabled 中的匹配
- /etc/nginx/sites-available/default 与 sites-enabled 中的匹配
在 /etc/nginx/sites-available/default 中尝试了很多与“listen 443”的组合,例如:
监听 443 ssl 默认服务器;监听 [::]:443 ssl 默认服务器 ipv6only=on;
问题
https://192.168.1.86/wp-admin(或者https://192.168.1.86等)显示“无法连接”,无论我在 nginx conf 文件中做什么。尝试了很多方法。
Nginx 似乎没有问题(语法、配置),但是激活后却不起作用。错误日志显示:
2016/08/23 14:02:07 [emerg] 10857#10857: bind() to 0.0.0.0:80 failed (98: Address already in use)
2016/08/23 14:02:07 [emerg] 10857#10857: bind() to 0.0.0.0:80 failed (98: Address already in use)
2016/08/23 14:02:07 [emerg] 10857#10857: bind() to 0.0.0.0:80 failed (98: Address already in use)
2016/08/23 14:02:07 [emerg] 10857#10857: bind() to 0.0.0.0:80 failed (98: Address already in use)
2016/08/23 14:02:07 [emerg] 10857#10857: bind() to 0.0.0.0:80 failed (98: Address already in use)
2016/08/23 14:02:07 [emerg] 10857#10857: still could not bind()
由于某种原因,nginx 尝试占用端口 80,但它应该使用 443。
我看到其他人也遇到了同样的问题,例如: nginx 尝试绑定错误的端口
只是为了清楚起见:我确实知道有一台服务器使用端口 80。我不知道的是为什么 nginx 在应该使用 443 时尝试使用端口 80。
有人能帮忙吗?提前谢谢
答案1
您可以尝试一些不弄乱default
文件配置的方法
a) 在中创建自己的配置文件/etc/nginx/sites-available
,然后在中通过软链接启用它/etc/nginx/sites-enabled
b)通过删除链接 default
完全禁用网站,或者简单地更改配置的端口,以便 nginx 监听端口 81(例如)default
/etc/nginx/sites-enabled
default
因此,如果 Nginx 坚持监听 http 或导致此行为的任何原因,它将不会占用端口 80 并允许 Varnish 占用它。
或者升级到 Ubuntu 16.04 LTS,它将为您提供最新的所有内容,包括 Openssl v1.0.2+,以便您可以启用 HTTP/2 支持。