我有一个节点JS应用程序运行在AWS Linux服务器与SSL。 我想实现nginx一样。 我GOOGLE了它,并阅读,如果我在nginx中实现ssl,那么节点应用程序运行在http。 所以我configurationnginx conf如下,并用普通的http服务器运行node js应用程序:
listen 443 ssl; server_name myserver.com; ssl_certificate myserver.chained.crt; ssl_certificate_key myserver.key; ssl_client_certificate myserver.crt; ssl_verify_client optional; location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header VERIFIED $ssl_client_verify; proxy_set_header DN $ssl_client_s_dn; proxy_pass http://127.0.0.1:3000; }
现在应用程序运行在http以及https上。 我想要实现nginx,并通过ssl和应用程序只运行在https上。 我的方法是正确的,我错过了什么?
我看到你有在3000端口上运行的应用程序,你想要做什么,以便它只运行在https上是阻止端口3000上的所有请求到服务器( 在aws中使用防火墙或安全组规则 ),并为每请求在端口80上,您将希望将它们重定向到https版本(端口443)。 像这样的东西:
server { listen 80; server_name my.domain.com; return 301 https://$server_name$request_uri; }
我在serverfault的这个答案中找到了上面的规则 。
upstream app { server 127.0.0.1:3000; } server { listen 80; listen 443 ssl; server_name www.example.com; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; client_header_buffer_size 64k; large_client_header_buffers 4 64k; if ($scheme = http) { return 301 https://$server_name$request_uri; } location ~ ^/(assets/|images/|img/|javascript/|js/|css/|stylesheets/|flash/|media/|static/|robots.txt|humans.txt|favicon.ico) { root /var/www/example.com/public/; access_log off; expires 24h; } location / { 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_pass http://app$uri$is_args$args; proxy_redirect off; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } }