我在Nginx服务器上部署网络。 Nginx配置了http和https版本,如下所示:
upstream stream {
server unix:///home/project/project.sock;
}
server {
listen 443;
ssl on;
ssl_certificate certificate.crt;
ssl_certificate_key server.key;
server_name server.com;
server_name *.server.com;
client_max_body_size 0;
charset utf-8;
# Main
location / {
uwsgi_pass stream;
# Parametros de uWSGI
uwsgi_param QUERY_STRING $query_string;
uwsgi_param REQUEST_METHOD $request_method;
uwsgi_param CONTENT_TYPE $content_type;
uwsgi_param CONTENT_LENGTH $content_length;
uwsgi_param REQUEST_URI $request_uri;
uwsgi_param PATH_INFO $document_uri;
uwsgi_param DOCUMENT_ROOT $document_root;
uwsgi_param SERVER_PROTOCOL $server_protocol;
uwsgi_param REMOTE_ADDR $remote_addr;
uwsgi_param REMOTE_PORT $remote_port;
uwsgi_param SERVER_ADDR $server_addr;
uwsgi_param SERVER_PORT $server_port;
uwsgi_param SERVER_NAME $server_name;
uwsgi_param UWSGI_SCHEME https;
}
}
server {
listen 80;
server_name server.com;
server_name *.server.com;
client_max_body_size 0;
charset utf-8;
# Main
location / {
uwsgi_pass stream;
# Parametros de uWSGI
uwsgi_param QUERY_STRING $query_string;
uwsgi_param REQUEST_METHOD $request_method;
uwsgi_param CONTENT_TYPE $content_type;
uwsgi_param CONTENT_LENGTH $content_length;
uwsgi_param REQUEST_URI $request_uri;
uwsgi_param PATH_INFO $document_uri;
uwsgi_param DOCUMENT_ROOT $document_root;
uwsgi_param SERVER_PROTOCOL $server_protocol;
uwsgi_param REMOTE_ADDR $remote_addr;
uwsgi_param REMOTE_PORT $remote_port;
uwsgi_param SERVER_ADDR $server_addr;
uwsgi_param SERVER_PORT $server_port;
uwsgi_param SERVER_NAME $server_name;
uwsgi_param UWSGI_SCHEME http;
}
}
一切正常,但是当你输入server.com时,浏览器总是选择HTTP版本,我希望它默认选择HTTPS版本。
我该怎么做?
答案 0 :(得分:2)
如果您只想通过HTTPS提供服务,则需要重定向HTTP服务器块中的所有HTTP请求:
File file = new File(dirFileName);
file.delete();
file.createNewFile();
DataOutputStream dataOut = new DataOutputStream(new FileOutputStream(file));
dataOut.writeBytes(view);
然后,您可以删除HTTP服务器中的所有其他配置,因为它永远不会被使用。
答案 1 :(得分:1)
您无法控制浏览器的功能(不幸的是);默认情况下,如果用户未键入 scheme (这是URL的http://
部分的技术名称);然后浏览器将默认为http。
如果您只想通过https://提供网站服务,则必须将所有请求重定向到https://版本。
在这里你必须要小心,如果按照solarissmoke的建议实现盲目重定向,任何POST请求都将失败,并且不会正确重定向。
更兼容的重定向方法是检查请求的类型:
server {
listen 80;
server_name example.com;
location / {
if ($request_method = GET) {
rewrite ^ https://$host$request_uri? permanent;
}
return 405;
}
}
然后,您可以添加进一步的检查,以仅重定向您想要https的流量。
答案 2 :(得分:1)
我一直在使用以下方法:
server {
listen 80;
server_name www.yourdomain.com *.yourdomain.com;
rewrite ^ https://$server_name$request_uri? permanent;
}
如果连接是正常的http,基本上将连接重定向到https(secure ssl)。 我希望它有所帮助。
答案 3 :(得分:0)
找到答案,
原来可以同时拥有HTTP和HTTPS服务器并默认选择HTTPS。我只需将conf文件的两个服务器混合在一起,就像:
server {
listen 80;
listen 443 default_server ssl;
ssl_certificate certificate.crt;
ssl_certificate_key server.key;
server_name server.com;
server_name *.server.com;
client_max_body_size 0;
charset utf-8;
...
}