nginx 配置 HTTPS 及http 强制跳转https.

本文详细解析了Nginx的配置文件,包括工作进程设置、错误日志记录、连接数限制、HTTP基本配置、SSL证书配置、代理设置及WebSocket升级等关键信息,适合Nginx初学者和进阶用户。

#user nobody;
worker_processes 1;

#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;



events {
worker_connections 1024;
}


http {
include mime.types;
default_type application/octet-stream;

#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';

#access_log logs/access.log main;

sendfile on;
#tcp_nopush on;

#keepalive_timeout 0;
keepalive_timeout 65;

#gzip on;

map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
 
upstream websocket {
server 192.168.9.201:8667;
}

server {
listen 80;
server_name 192.168.9.201;
rewrite ^(.*) https://$server_name$1 permanent; #强制http 跳转到https地址
#charset koi8-r;

#access_log logs/host.access.log main;

location / {
        index index.html;
    root /opt/nginx-web/iphm/;
            autoindex on;
        #rewrite ^(.*)$ https://$host$1 permanent;
}

#error_page 404 /404.html;

# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location /config {
         index index.html;
root /opt/nginx-web/config/;
autoindex on;
}
 
     location ^~ /websocket/alarm {
     proxy_pass http://websocket;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
}       
}


# another virtual host using mix of IP-, name-, and port-based configuration
#
    server {
listen 8888;
        server_name 192.168.9.201;
rewrite ^(.*) https://$server_name:888$1 permanent;
location / {
         index index.html;
root /opt/nginx-web/config/;
autoindex on;
}
}
server {
listen 8889;
        server_name localhost;

location / {
         index index.html;
root /opt/nginx-web/diagnostic/;
autoindex on;
}
}


#HTTPS server
 
    server {
        listen 3001;
        server_name localhost;
        location / {
            #index index.html;
            #root /opt/nginx-web/iphm/;
            proxy_pass http://192.168.9.10:8102;
        }
    }
    # HTTPS server
#
server {
listen 443 ssl;
server_name 192.168.9.201;
ssl on;
ssl_certificate /usr/local/webserver/nginx/keys/server.crt;
ssl_certificate_key /usr/local/webserver/nginx/keys/server.key;
ssl_protocols SSLv2 SSLv3 TLSv1;
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
ssl_prefer_server_ciphers on;
# location /saml {
# proxy_pass http://192.168.70.34:8104;
# }
# location /sso {
# proxy_pass http://192.168.70.34:8104;
# }
location / {
root /opt/nginx-web/iphm;
index index.html;
autoindex on;
}
location /grafana {
rewrite ^(/grafana)(.*)$ $2 break;
proxy_pass http://192.168.9.201:3000;
}

location /zuul {
rewrite ^(/zuul)(.*)$ $2 break;
proxy_pass http://192.168.9.10:8102;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location ^~ /websocket/alarm {
     proxy_pass http://websocket;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
}
        error_log logs/error_8889.log error;
}

server {
listen 888 ssl;
server_name 192.168.9.201;
ssl on;
ssl_certificate /usr/local/webserver/nginx/keys/server.crt;
ssl_certificate_key /usr/local/webserver/nginx/keys/server.key;
ssl_protocols SSLv2 SSLv3 TLSv1;
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
ssl_prefer_server_ciphers on;
# location /saml {
# proxy_pass http://192.168.70.34:8104;
# }
# location /sso {
# proxy_pass http://192.168.70.34:8104;
# }
location / {
root /opt/nginx-web/config;
index index.html;
autoindex on;
}
        error_log logs/error_888.log error;
}
server {
listen 300 ssl;
server_name 192.168.9.201;
ssl on;
ssl_certificate /usr/local/webserver/nginx/keys/server.crt;
ssl_certificate_key /usr/local/webserver/nginx/keys/server.key;
ssl_protocols SSLv2 SSLv3 TLSv1;
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
ssl_prefer_server_ciphers on;
# location /saml {
# proxy_pass http://192.168.70.34:8104;
# }
# location /sso {
# proxy_pass http://192.168.70.34:8104;
# }
location / {
proxy_pass http://192.168.9.201:3000$request_uri;
}

location ^~/pubilc/ {
proxy_pass http://192.168.9.201:3000$request_uri;
}
        error_log logs/error_300.log error;
}

}
<think>我们正在回答用户关于Nginx配置HTTP强制跳转HTTPS的问题。根据引用内容,常见的配置方法包括: 1. 使用301重定向:在监听80端口的server块中,使用return 301或rewrite指令将HTTP请求重定向到HTTPS。 2. 配置两个server块:一个监听80端口用于重定向,另一个监听443端口处理HTTPS请求。 下面提供两种常用配置方法: ### 方法1:使用return指令(推荐) ```nginx server { listen 80; server_name example.com www.example.com; # 替换为你的域名 return 301 https://$server_name$request_uri; # 永久重定向到HTTPS # 或者使用:return 301 https://$host$request_uri; } server { listen 443 ssl; server_name example.com www.example.com; # SSL配置 ssl_certificate /path/to/your/fullchain.pem; # 替换为你的证书路径 ssl_certificate_key /path/to/your/privkey.pem; # 替换为你的私钥路径 # 其他SSL相关配置(如协议、加密套件等)... # 网站内容配置 location / { root /usr/share/nginx/html; index index.html; } } ``` ### 方法2:使用rewrite指令 ```nginx server { listen 80; server_name example.com www.example.com; # 将HTTP请求重写为HTTPS rewrite ^(.*)$ https://$host$1 permanent; # permanent表示永久重定向 # 或者更精确的:rewrite ^ https://$server_name$request_uri? permanent; } # HTTPS server配置同上 ``` ### 注意事项: 1. 确保在监听443端口的server块中正确配置了SSL证书和私钥的路径。 2. 使用`$server_name`会跳转到server_name指定的域名,而`$host`变量则代表请求头中的Host值(即用户请求的原始域名)。通常两者效果相同,但若配置了多个域名,使用`$host`可以保持用户请求的原始域名。 3. 使用`return 301`比`rewrite`更高效,因为return指令直接返回状态码,不进行正则匹配。 根据引用[4]的配置示例,我们还可以看到在同一个配置文件中同时配置HTTP重定向和HTTPS服务。引用[3]中则使用了if条件判断来重定向,但通常不推荐使用if,因为效率较低且容易出错。 因此,我们推荐使用第一种方法(return指令)进行配置配置完成后,需要重新加载Nginx配置: ```bash nginx -s reload ``` 测试配置是否正确: 1. 访问http://example.com 应该自动跳转https://example.com 2. 检查跳转后的页面是否正常显示 ### 相关问题 1. 如何为Nginx配置SSL证书? 2. 如何测试Nginx配置是否正确? 3. 如何配置多个域名同时支持HTTP跳转HTTPS? 4. 如何解决Nginx重定向循环问题? 5. 如何优化Nginx的SSL配置以提高安全性? </think> ## Nginx 配置 HTTP 强制跳转 HTTPS 的方法 以下是三种常用的配置方法,根据引用内容整理: ### 方法一:301 永久重定向(推荐) ```nginx server { listen 80; server_name yourdomain.com www.yourdomain.com; # 替换为你的域名 # 强制重定向到 HTTPS return 301 https://$server_name$request_uri; # [^1][^4][^5] } ``` ### 方法二:rewrite 重定向 ```nginx server { listen 80; server_name yourdomain.com www.yourdomain.com *.yourdomain.com; # 支持泛域名 # 重定向所有 HTTP 请求到 HTTPS if ($host ~* "yourdomain.com$") { # [^3] rewrite ^(.*)$ https://$host$1 permanent; # [^2] } } ``` ### 方法三:完整配置示例(含 HTTPS) ```nginx # HTTP 重定向配置 server { listen 80; server_name yourdomain.com www.yourdomain.com; return 301 https://$host$request_uri; # [^4][^5] } # HTTPS配置 server { listen 443 ssl; server_name yourdomain.com www.yourdomain.com; # SSL 证书配置 ssl_certificate /etc/nginx/ssl/fullchain.pem; # 证书路径 ssl_certificate_key /etc/nginx/ssl/privkey.pem; # 私钥路径 # SSL 优化参数 ssl_session_timeout 1d; ssl_session_cache shared:MozSSL:10m; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256; ssl_prefer_server_ciphers on; # 网站根目录 root /var/www/html; index index.html; location / { try_files $uri $uri/ =404; } } ``` ### 验证与测试步骤 1. **检查配置语法**: ```bash nginx -t ``` 2. **重载配置**: ```bash nginx -s reload ``` 3. **测试跳转**: ```bash curl -I http://yourdomain.com # 应返回 301 重定向 ``` ### 关键要点说明 1. **301 vs 302**: - `return 301` 是永久重定向(SEO友好)[^5] - `return 302` 是临时重定向(测试时使用) 2. **域名变量**: - `$server_name`:Nginx配置中定义的域名 - `$host`:客户端请求的原始Host头 - `$request_uri`:包含完整请求路径和参数 3. **SSL证书**: - 需提前申请并配置证书文件路径 - 推荐使用Let's Encrypt免费证书 4. **性能优化**: - 启用SSL会话缓存减少握手开销 - 使用TLS 1.3协议提升性能[^4] --- ## 相关问题 1. 如何为 Nginx 配置免费的 Let's Encrypt SSL 证书? 2. Nginx 重定向时如何保留原始请求的 URI 参数? 3. 如何解决 HTTPS 混合内容(Mixed Content)警告问题? 4. 在 Kubernetes 中如何配置 Ingress 的 HTTPHTTPS 重定向? 5. 如何测试 SSL 配置的安全性和性能? 6. Nginx 重定向循环(too many redirects)错误如何排查?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值