草庐IT

Nginx部署Https 443转发,配置方式和采坑记录

唐代王维写代码 2024-01-05 原文

今天星期天,在家闲着,就想弄弄nginx。我用的Nginx版本为1.1.7。服务器为WindowsServer2019DataCenter。

之前在某个项目中由于跨域请求,用nginx 代理解决过。所以对nginx印象不错。实用的好工具。

1、首先去阿里云或者腾讯云申请一个免费一年的SSL证书。申请很快不需要钱。具体方式百度一堆。

2、现在证书在服务器上部署,根据你的Web容器有不同类型的证书。我这里下载的是Nginx版本的,因为我测试是在Nginx中拦截443进行其他内部转发,所以在Nginx中使用。

3、Nginx配置文件Conf配置项:

# HTTPS server
	server {
        listen 443 ssl http2;
        server_name www.XXXXX.cn;
        
        ssl_certificate     /cert/nginx/nginx_www.XXXXX.cn.pem;
        ssl_certificate_key /cert/nginx/nginx_www.XXXXX.cn.key;
        ssl_session_timeout 5m;
        ssl_protocols TLSV1 TLSv1.1 TLSv1.2;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
        ssl_prefer_server_ciphers on;
         
        access_log logs/XXXXX/access.log;
        error_log  logs/XXXXX/error.log;
 
        location / {
            root   html;
            index  index.html index.htm;
        }             
 
        location /shop {
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade"; 
            proxy_pass_header Set-Cookie;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $host;
            proxy_redirect off;
 
            add_header Access-Control-Allow-Origin *;
            add_header Access-Control-Allow-Methods "POST, GET,PUT,DELETE, OPTIONS";
            add_header Access-Control-Allow-Headers "Origin, Authorization, Accept";
            add_header Access-Control-Allow-Credentials true;
            
 
            proxy_pass http://localhost:8092/;
        }
 
    }

配置过程中有几个地方需要注意的:

3.1、配置443拦

3.2、配置SSL证书的位置,这里的位置有点坑,一定要注意,当前在服务器上Nginx在C:/Nginx/ 目录中,证书在C:/Cert/目录中,但是经过几次测试,发现这个路径,不能写C:/Cert/XXX证书的路径,系统会提示:截的域名和方式,注意拦截域名。

BIO_new_file() failed (SSL: error:0200107B:system library:fopen:Unknown error:fopen

明显路径找不到,文件无法访问打开,如果将证书放到Nginx目录下面,写相对于Nginx.exe的路径,也是相同的提示。反正总是路径不对,无法方法。


后来经过查看Nginx启动报错日志,发现这个路径是相对于C:/ 的一个相对路径,从C盘根目录下配置,路径中无须保留C:/这样的字符,最后实验成功

参考文章:https://blog.csdn.net/ken_ding/article/details/78929551

3.3、日志配置路径相对于Nginx.exe路径,路径为全路径,中间有文件夹不存在的需要提前创建好,不然启动会报出异常。

经过上述步骤配置,启动Nginx后,用https 访问域名,会显示Nginx页面,说明拦截配置成功。


————————————————
版权声明:本文为CSDN博主「ltylove2007」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/ltylove2007/article/details/107136902

4、配置转发内部网站,是用户访问系统时还是显示Htpps网站,并且是安全的。

location /shop {
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade"; 
            proxy_pass_header Set-Cookie;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $host;
            proxy_redirect off;
 
            add_header Access-Control-Allow-Origin *;
            add_header Access-Control-Allow-Methods "POST, GET,PUT,DELETE, OPTIONS";
            add_header Access-Control-Allow-Headers "Origin, Authorization, Accept";
            add_header Access-Control-Allow-Credentials true;
            
 
            proxy_pass http://localhost:8092/;
        }

关键地方标注:

4.1、拦截域名的子地址,这样能做到,一个域名下挂接多个子系统,并且都从这个域名下转发。

4.2、代理内部系统的转发方式,和跨域请求配置,这里看自己项目需要。

4.3、最后是关键的代理转发内部地址:配置内部系统配置,这里标注的以“/”结尾和不以“/”,差别很大,具体差别描述,看下面文章,这里不赘述了。总之带“/”,在直接转发了。没有拼接 shop/拦截地址,不带“/”,则在转发过程中会携带拦截的shop/ 进行一起转发。

参考文章:https://blog.csdn.net/Cz_csdn/article/details/104419708
————————————————

可以在自己内部系统访问方式上面加上/shop的虚拟路径就可以,完美解决转发后的路径问题了。

有关Nginx部署Https 443转发,配置方式和采坑记录的更多相关文章

  1. ruby - 如何以所有可能的方式将字符串拆分为长度最多为 3 的连续子字符串? - 2

    我试图获取一个长度在1到10之间的字符串,并输出将字符串分解为大小为1、2或3的连续子字符串的所有可能方式。例如:输入:123456将整数分割成单个字符,然后继续查找组合。该代码将返回以下所有数组。[1,2,3,4,5,6][12,3,4,5,6][1,23,4,5,6][1,2,34,5,6][1,2,3,45,6][1,2,3,4,56][12,34,5,6][12,3,45,6][12,3,4,56][1,23,45,6][1,2,34,56][1,23,4,56][12,34,56][123,4,5,6][1,234,5,6][1,2,345,6][1,2,3,456][123

  2. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  3. ruby-on-rails - 如何优雅地重启 thin + nginx? - 2

    我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server

  4. ruby-on-rails - 独立 ruby​​ 脚本的配置文件 - 2

    我有一个在Linux服务器上运行的ruby​​脚本。它不使用rails或任何东西。它基本上是一个命令行ruby​​脚本,可以像这样传递参数:./ruby_script.rbarg1arg2如何将参数抽象到配置文件(例如yaml文件或其他文件)中?您能否举例说明如何做到这一点?提前谢谢你。 最佳答案 首先,您可以运行一个写入YAML配置文件的独立脚本:require"yaml"File.write("path_to_yaml_file",[arg1,arg2].to_yaml)然后,在您的应用中阅读它:require"yaml"arg

  5. ruby - Sinatra:运行 rspec 测试时记录噪音 - 2

    Sinatra新手;我正在运行一些rspec测试,但在日志中收到了一堆不需要的噪音。如何消除日志中过多的噪音?我仔细检查了环境是否设置为:test,这意味着记录器级别应设置为WARN而不是DEBUG。spec_helper:require"./app"require"sinatra"require"rspec"require"rack/test"require"database_cleaner"require"factory_girl"set:environment,:testFactoryGirl.definition_file_paths=%w{./factories./test/

  6. Ruby Sinatra 配置用于生产和开发 - 2

    我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm

  7. ruby-on-rails - 每次我尝试部署时,我都会得到 - (gcloud.preview.app.deploy) 错误响应 : [4] DEADLINE_EXCEEDED - 2

    我是Google云的新手,我正在尝试对其进行首次部署。我的第一个部署是RubyonRails项目。我基本上是在关注thisguideinthegoogleclouddocumentation.唯一的区别是我使用的是我自己的项目,而不是他们提供的“helloworld”项目。这是我的app.yaml文件runtime:customvm:trueentrypoint:bundleexecrackup-p8080-Eproductionconfig.ruresources:cpu:0.5memory_gb:1.3disk_size_gb:10当我转到我的项目目录并运行gcloudprevie

  8. ruby-on-rails - Rails 5 Active Record 记录无效错误 - 2

    我有两个Rails模型,即Invoice和Invoice_details。一个Invoice_details属于Invoice,一个Invoice有多个Invoice_details。我无法使用accepts_nested_attributes_forinInvoice通过Invoice模型保存Invoice_details。我收到以下错误:(0.2ms)BEGIN(0.2ms)ROLLBACKCompleted422UnprocessableEntityin25ms(ActiveRecord:4.0ms)ActiveRecord::RecordInvalid(Validationfa

  9. ruby-on-rails - 正确的 Rails 2.1 做事方式 - 2

    question的一些答案关于redirect_to让我想到了其他一些问题。基本上,我正在使用Rails2.1编写博客应用程序。我一直在尝试自己完成大部分工作(因为我对Rails有所了解),但在需要时会引用Internet上的教程和引用资料。我设法让一个简单的博客正常运行,然后我尝试添加评论。靠我自己,我设法让它进入了可以从script/console添加评论的阶段,但我无法让表单正常工作。我遵循的其中一个教程建议在帖子Controller中创建一个“评论”操作,以添加评论。我的问题是:这是“标准”方式吗?我的另一个问题的答案之一似乎暗示应该有一个CommentsController参

  10. ruby-on-rails - Ruby on Rails 可以部署在 Azure 网站上吗? - 2

    我可以在Azure网站上部署RubyonRails吗? 最佳答案 还没有。目前仅支持.NET和PHP。 关于ruby-on-rails-RubyonRails可以部署在Azure网站上吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/12964010/

随机推荐