我有这个客户端服务器,我想在像这个 app..net 这样的网站上设置 SSL
服务器运行 ubunto 并用 laravel / php 编写。
server {
server_name <domain>.net www.<domain>.net;
return 301 https://app.<domain>.net$request_uri;
}
server {
listen 443 ssl;
server_name app.<domain>.net;
root /home/<domain>/www/site/public;
location / {
index index.php;
try_files $uri $uri/ /index.php?q=$uri&$args;
}
error_page 404 /index.php;
location ~ \.php? {
include fastcgi_params;
fastcgi_index index.php;
fastcgi_pass unix:/var/run/php5-fpm.<domain>.sock;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
ssl on;
ssl_certificate /etc/nginx/ssl/<domain>/ssl-bundle.crt;
ssl_certificate_key /etc/nginx/ssl/<domain>/<domain>.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-R$
ssl_prefer_server_ciphers on;
access_log /home/<domain>/logs/access.log;
error_log /home/<domain>/logs/error.log;
}
这是我的特定网站的配置文件。现在,当我访问 app..net 时,我登录的是 www..com,我不知道问题出在哪里。
编辑:
如果我将配置文件更改为以下内容:
server {
server_name <domain>.net www.<domain>.net;
return 301 http://<domain>.net$request_uri;
}
server {
server_name app.<domain>.net;
root /home/<domain>/www/site/public;
location / {
index index.php;
try_files $uri $uri/ /index.php?q=$uri&$args;
}
error_page 404 /index.php;
location ~ \.php? {
include fastcgi_params;
fastcgi_index index.php;
fastcgi_pass unix:/var/run/php5-fpm.<domain>.sock;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
ssl on;
ssl_certificate /etc/nginx/ssl/<domain>/ssl-bundle.crt;
ssl_certificate_key /etc/nginx/ssl/<domain>/<domain>.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-R$ ssl_prefer_server_ciphers on;
access_log /home/<domain>/logs/access.log;
error_log /home/<domain>/logs/error.log;
}
然后我进入了正确的页面,但没有 https
答案1
据我所知,您的域名没有从 HTTP 重定向到 HTTPS。
这可以解释为什么如果不监听该域的 80 端口,NGINX 就会回退到默认服务器,我认为该服务器是您的主域。
无论如何,如果您希望在 app..net 上自动使用 HTTPS,则应将 app..net 添加到将 HTTP 重定向到 HTTPS 的第一个块。
答案2
来自您编辑的配置的此服务器块:
server {
server_name <domain>.net www.<domain>.net;
return 301 http://<domain>.net$request_uri;
}
毫无意义,只会创建无休止的重定向循环:从http://<domain>.net/
回到http://<domain>.net/
。
如果主要地址是https://应用程序..net/ 并且你希望将用户重定向到那里(并且始终使用 https),只需写入:
server {
server_name <domain>.net www.<domain>.net app.<domain>.net;
return 301 https://app.<domain>.net/;
}
server {
server_name app.<domain>.net;
listen 443;
ssl on;
...
}
如果 nginx 配置中没有其他 server { } 块,则第一个黑色可以写为
server {
server_name _;
listen 80 default_server;
return 301 https://app.<domain>.net/;
}
还要检查 PHP 应用程序的配置方式 - 可能是应用程序发送了一些重定向。