https://www.gravatar.com/avatar/7a0c24f697ea1587001c36d00039b60f?s=240&d=mp

Nginx配置ssl证书无法访问的问题

nginx配置了SSL证书,但是http能访问,https不行


检查443端口是否已经开放

  • 腾讯云和阿里云的安全策略组里面放行端口80443
  • 防火墙端口放开。通过SSH登录到服务器(centos为例)
    • centos通过firewall-cmd --list-all查看是否开放了443端口
    • 若没有,运行firewall-cmd --zone=public --add-port=443/tcp --permanent
    • systemctl restart firewalld重启防火墙生效

检查证书是否配置正确

    server {
        listen 443 ssl;
        server_name your domain;
        client_max_body_size 1024m;

        ssl_certificate /www/server/nginx/conf/cert/555.pem;
        ssl_certificate_key /www/server/nginx/conf/cert/555.key;
        ssl_session_timeout 5m;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
    }

强制http跳转到https,提示重定向过多


你使用了rewrite,并且在一个server里面同时监听了80443

解决方法:80443分别拆分到不同的server,80里面做301重定向,下面是配置文件,仅供参考。

   upstream halo {
        server 127.0.0.1:8090;
    }
    server {
        listen 80;
        return 301 https://yourdomain$request_uri;
    }
    server {
        listen 443 ssl;
        server_name yourdomain;
        client_max_body_size 1024m;

        #charset koi8-r;

        ssl_certificate /www/server/nginx/conf/cert/xxx.pem;
        ssl_certificate_key /www/server/nginx/conf/cert/xxx.key;
        ssl_session_timeout 5m;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;

        #access_log  logs/host.access.log  main;
        location / {
            proxy_pass http://halo;
            proxy_set_header HOST $host;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For
            $proxy_add_x_forwarded_for;
        }
        #error_page  404              /404.html;
        # redirect server error pages to the static page /50x.html
        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
            root html;
        }
    }

There is an issue with node-fibers

MacBook M1taro

在MacBook M1上运行taro项目yarn dev:h5的时候会报下面的错误:

## There is an issue with `node-fibers` ##
`/node_modules/fibers/bin/darwin-arm64-88/fibers.node` is missing.

Try running this to fix the issue: .nvm/versions/node/v15.5.0/bin/node /node_modules/fibers/build
Error: Cannot find module 'node_modules/fibers/bin/darwin-arm64-88/fibers'

找了很久没找到解决方案,知道找个一个类似的问题:https://www.jianshu.com/p/145015d721a5

解决办法

我的环境如下: node: v15.14.0 taro-cli: v3.2.8

先看错误提示:

## There is an issue with `node-fibers` ##
`/node_modules/fibers/bin/darwin-arm64-88/fibers.node` is missing.

Try running this to fix the issue: .nvm/versions/node/v15.14.0/bin/node /node_modules/fibers/build
Error: Cannot find module 'node_modules/fibers/bin/darwin-arm64-88/fibers'

执行/Users/xxx/.nvm/versions/node/v15.14.0/bin/node /Users/xxx/xxx/node_modules/fibers/build时找不到fibers的darwin-arm64-88

  1. 在项目目录下执行find . -name fibers.node,看看输出路径有没有darwin-arm64-88,如果没有,继续下面步骤2
  2. 在项目目录手动执行/Users/xxx/.nvm/versions/node/v15.14.0/bin/node /Users/xxx/xxx/node_modules/fibers/build,输出提示node-gyp not found! Please ensure node-gyp is in your PATH--
  3. 执行npm install -g node-gyp安装node-gyp
  4. 再次执行/Users/xxx/.nvm/versions/node/v15.14.0/bin/node /Users/xxx/xxx/node_modules/fibers/build,此时报错binding.gyp not found
  5. 项目目录下执行find . -name binding.gyp,会发现node_modules/fibers/binding.gyp,项目中是存在这个文件的
  6. 项目录下下cd node_modules/fibers,然后再次执行/Users/xxx/.nvm/versions/node/v15.14.0/bin/node /Users/xxx/xxx/node_modules/fibers/build,不出意外的话此时应该编译通过了。
  7. 然后cd ../..,执行yarn dev:h5,成功启动。

怎样在Centos中安装Oracle JDK

解决方案

  1. 这里 下载最新的JDK. 现在CentOs (Linux x64 RPM Package) , jdk-8u281-linux-x64.rpm
  2. chmod +x jdk-8u281-linux-x64.rpm
  3. yum install jdk-8u281-linux-x64.rpm Java会被安装在/usr/java目录
  4. alternatives --config java 选择你要的Java版本
  5. 验证你的Java版本
java version "1.8.0_281"
Java(TM) SE Runtime Environment (build 1.8.0_281-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.281-b09, mixed mode)

ABIs [arm64-v8a, x86_64] are not supported for platform. Supported ABIs are [armeabi-v7a, x86].

M1的兼容性问题还是不少,比如NDK开发遇到坑了,提示 ABIs [arm64-v8a, x86_64] are not supported for platform. Supported ABIs are [armeabi-v7a, x86]

然后找到了这个issue: https://github.com/android/ndk/issues/1299

尝试了无果。

然后无意中发现其他人的M1可以编译,对比后发现是NDK版本问题,我使用的最新22版本报错,但是降级到21.1.6352462后能正常编译成功。

解决MacBook M1下无法运行uiautomatorviewer

MacBook使用ARM芯片后虽然带来了性能和续航的提升,但是也带来了不少兼容性问题,好在发布几个月后主流的开发工具都慢慢适配完毕,然而一些小众的工具迟迟无法引来更新。所以Rosetta 2模式仍然非常重要。

默认情况下,我们执行./uiautomatorviewer会报错:

SWT folder '/Users/xxx/Library/Android/sdk/tools/lib/aarch64' does not exist.
Please export ANDROID_SWT to point to the folder containing swt.jar for your platform.

意思是lib下没有aarch64这个目录。

尝试方案1: 在lib下建立aarch64目录,网上找aarch64版本的swt.jar,无果。 最终报错如下:

Exception in thread "main" java.lang.UnsatisfiedLinkError: Could not load SWT library. Reasons:
	no swt-cocoa-4936r26 in java.library.path
	no swt-cocoa in java.library.path
	Can't load library: /Users/xxx/.swt/lib/macosx/aarch64/libswt-cocoa-4936r26.jnilib
	Can't load library: /Users/xxx/.swt/lib/macosx/aarch64/libswt-cocoa.jnilib
	/Users/xxx/.swt/lib/macosx/aarch64/libswt-cocoa-4936r26.jnilib: dlopen(/Users/xxx/.swt/lib/macosx/aarch64/libswt-cocoa-4936r26.jnilib, 1): no suitable image found.  Did find:
	/Users/xxx/.swt/lib/macosx/aarch64/libswt-cocoa-4936r26.jnilib: mach-o, but wrong architecture
	/Users/xxx/.swt/lib/macosx/aarch64/libswt-cocoa-4936r26.jnilib: mach-o, but wrong architecture

	at org.eclipse.swt.internal.Library.loadLibrary(Library.java:338)
	at org.eclipse.swt.internal.Library.loadLibrary(Library.java:257)
	at org.eclipse.swt.internal.C.<clinit>(C.java:19)
	at org.eclipse.swt.internal.cocoa.NSMutableArray.arrayWithCapacity(NSMutableArray.java:39)
	at org.eclipse.swt.widgets.Canvas.<clinit>(Canvas.java:55)
	at org.eclipse.jface.window.Window.createShell(Window.java:487)
	at org.eclipse.jface.window.Window.create(Window.java:430)
	at org.eclipse.jface.window.Window.open(Window.java:790)
	at com.android.uiautomator.UiAutomatorViewer.main(UiAutomatorViewer.java:78)

折腾许久也没找到解决方案,放弃。

尝试方案2: 既然增加aarch64支持的方案无法解决,那就只能尝试Rosetta 2方式了。 运行arch -x86_64 ./uiautomatorviewer无效果。

uiautomatorviewer依赖Java环境,我使用的是zulu arm版本jdk,所以切换jdk为x64版本。 export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_281.jdk/Contents/Home

然后再次执行./uiautomatorviewer,成功运行。

MacBook M1开发Flutter遇到的问题

前言

前一台MacBook已经战了6年,去年准备换16寸,因为各种原因一直等到了今年,又因为得知ARM架构的MacBook要上了,等等党永不为奴,终于等到了它。

我买的是MacBook Pro M1 16+512的配置,用了几天觉得等M2才是真香,M1离真香还差点意思,尤其是系统bug,太致命,开发工具目前原生适配的也不多,用起来提升没那么明显。

搭建flutter环境

这个不细说,官网已经很详细了:https://flutterchina.club/setup-macos/

M1开发Flutter靠谱吗?

整体还行,但是目前来说,因为适配的问题,想模拟器运行都要调试一番,iPhone和Android都是。不过M1可以直接把自己的udid注册到开发者账号中去,原生直接运行iPhone App,这个确实骚,但是为什么我的MacBook注册后设备类型是ipod? https://img.ibook8.club/mweb/16094114966896.jpg

目前M1上iphone模拟器运行flutter app可能遇到一些问题,主要是三方依赖的插件很多没适配arm64,需要大量调试(参考:https://stackoverflow.com/questions/63607158/xcode-12-building-for-ios-simulator-but-linking-in-object-file-built-for-ios)
android模拟器只有个测试版,问题一大堆,也基本不可用,所以现在这个阶段想在M1上开发app的话,调试需要真机走起。(模拟器查看:https://androidstudio.googleblog.com/2020/12/android-emulator-apple-silicon-preview.html)

偶尔会有一些无法理解的错误,命令行flutter clean可能有惊喜。

常见错误

webview_plugin ‘Flutter/Flutter.h’ file not found

旧项目迁移到M1上后,可能会出现这个错误 解决方案:

$ rm ios/Flutter/Flutter.podspec
$ flutter clean

vm-service: Error: Unhandled exception

运行时报这个错,应该是你在运行小猫咪 解决方案:

export NO_PROXY=localhost,127.0.0.1
source ~/.zshrc