自己搭建了个网站,也部署了ssl,
电脑能通过域名直接访问页面
手机只能在域名前面加上https://才能访问,直接用域名访问就显示404,请问这是怎么回事?该怎么解决?
当你在电脑上通过域名直接访问页面时,可能会自动进行 HTTP 到 HTTPS 的重定向,而手机浏览器可能没有进行相同的重定向。
要解决这个问题,有以下几种方法:
1.手机端解决:(解决成功的概率不高)
清除手机浏览器缓存:有时候手机浏览器会缓存旧的重定向设置,导致无法正确访问页面。尝试清除手机浏览器的缓存,然后重新尝试通过域名访问页面。
更新手机浏览器版本:如果你的手机浏览器版本较旧,可能存在一些兼容性问题。尝试更新手机浏览器到最新版本,然后重新尝试通过域名访问页面。
2.服务端解决:(专业性较强,解决成功概率高)
检查服务器配置:请确保你的服务器配置正确,包括 SSL 证书安装和配置、HTTP 到 HTTPS 的重定向设置。可以检查服务器日志以了解是否有相关错误信息。
更改重定向策略:你可以尝试在服务器端修改重定向策略,强制将 HTTP 请求重定向到 HTTPS。具体实施方法取决于你使用的服务器软件,例如 Apache 或 Nginx。
server {
listen 443 ssl;
server_name xxxx; # localhost修改为您证书绑定的域名。
ssl on; #设置为on启用SSL功能。
root /usr/local/Web/src/;
index index.html index.htm;
ssl_certificate cert/xxxxxx.pem; #将domain name.pem替换成您证书的文件名。
ssl_certificate_key cert/xxxxx.key; #将domain name.key替换成您证书的密钥文件名。
ssl_session_timeout 5m;
ssl_ciphers xxxxxx; #使用此加密套件。
ssl_protocols TLSv1; #使用该协议进行配置。
ssl_prefer_server_ciphers on;
location ~* .(html|js|css)$ {
root /usr/local/Web/src/; #站点目录。
index index.html index.htm;
}
}
上面配置的含义是访问https的时候nginx根据location的正则表达式匹配跳转到对应的页面,这里开启了443端口的监听,因为https协议默认的端口号为443,http协议默认为80
重点来了
如果我们有其它非https的接口工程如何通过nginx来实现不在项目中配置https相关的认证代码,从而实现http协议升级https ,让前端调接口的时候不会报跨域异常
有两种方式,一种是另开一个端口比如我原端口是5280通过nginx另开一个5281端口监听,访问5281的时候转发到5280再加上一些ssl认证信息就能够直接完成升级.一种则直接再443端口中多加几个location的正则匹配
配置如下:
server {
listen 5281 ssl;
server_name www.baidu.com;
ssl_certificate cert/xxxxx.pem; #将domain name.pem替换成您证书的文件名。
ssl_certificate_key cert/xxxxx.key; #将domain name.key替换成您证书的密钥文件名。
ssl_session_timeout 5m;
ssl_ciphers xxxxx #使用此加密套件。
ssl_protocols TLSv1; #使用该协议进行配置。
ssl_prefer_server_ciphers on;
location /{
proxy_pass http://xxx.xxx.xx.xx:5280;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_set_header Connection "";
proxy_http_version 1.1;
proxy_connect_timeout 1;
proxy_send_timeout 30;
proxy_read_timeout 60;
}
}
这可能是因为你的手机浏览器缓存了http的访问记录,所以直接访问域名会显示404。你可以尝试清除浏览器缓存,或者在手机浏览器中输入https://域名来访问网站。如果你想让所有的访问都自动跳转到https,你可以在apache的web.xml中进行设置
这种情况可能是由于以下原因导致的:
域名解析问题:确保手机和电脑都能够正确解析该域名到相同的IP地址。你可以尝试在手机上使用其他应用或浏览器访问同样的域名,以确定是否是特定设备的解析问题。
代理配置问题:检查手机的网络代理配置,确保没有设置代理或代理配置正确。代理服务器可能会导致无法正常访问某些网站或服务。
HTTPS强制重定向:有些网站可能强制将HTTP请求重定向到HTTPS,对于只输入域名而不添加协议前缀的请求,电脑上的浏览器可能默认使用了HTTP协议,而手机上的浏览器可能默认使用了HTTPS协议。你可以尝试在电脑上手动在浏览器中输入https://域名来访问,看是否仍然可以正常访问。
1.手机浏览器支持问题,可以通过访问http://www.baidu.com,试下看是否会跳到https
2.nginx中配置http “redirect”