🌓

Nginx配置内网自签名https证书和客户端的使用

nginx配置https是需要CA颁发证书的,为了测试方便,我们可以使用自签名证书

一、 Nginx配置内网自签名https证书

1.如何生成自签名证书

1.1:我们需要为服务端和客户端准备私钥和公钥:

1
2
3
4
//生成服务器端私钥
openssl genrsa -out server.key 2048
//生成服务器端公钥
openssl rsa -in server.key -pubout -out server.pem

阅读全文

配置Nginx的websocket代理

方法一

在nginx.conf配置一下,就可以提供不同类型的服务。本文简单描述下如何转发(反向代理)一个socket服务。

将要配置一个如上图示的转发服务。

阅读全文

Nginx日志按天生成并定期删除日志的方法

问题:nginx会按照nginx.conf的配置生成access.log和error.log,随着访问量的增长,日志文件会越来越大,既会影响访问的速度(写入日志时间延长),也会增加查找日志的难度,nginx没有这种按天或更细粒度生成日志的机制。总共两种方法:1.写脚本,通过定时任务按天重命名日志、重启nginx的方法实现(有重启失败的风险)2.通过工具cronolog实现。推荐方法二,所以只介绍第二个方法。

阅读全文

使用iptables开启指定端口

centos默认开启的端口只有22端口,专供于SSH服务,其他端口都需要自行开启.

1.修改/etc/sysconfig/iptables文件,增加如下一行:

1
2
3
-A INPUT -m state --state NEW -m tcp -p tcp --dport 10000 -j ACCEPT 

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 10000 -j ACCEPT

阅读全文

Liunx防火墙

1、查看防火墙状态

1
systemctl status firewalld

阅读全文

Liunx配置免密登录上传

一、Linux下生成密钥

ssh-keygen的命令手册,通过”man ssh-keygen“命令:

阅读全文

Nginx平滑升级版本

线上业务,纯属测试升级,线上业务不要采用此方法,可以采用官方推荐的平滑升级。

环境:

  Linux centos 7.7 nginx-1.18,1

  nginx升级到最新nginx-1.20.1

一,官方下载最新源码

1
2
wget http://nginx.org/download/nginx-1.20.1.tar.gz
tar -zxvf nginx-1.20.1.tar.gz

阅读全文

Liunx环境下Nginx的部署上线

一、GCC G++开发类库

开始前,请确认gcc g++开发类库是否装好,默认已经安装
ububtu平台编译环境可以使用以下指令

阅读全文

前端自动化打包发布配置

一、使用前言

1、主要是针对前端的测试环境和生产环境进行配置单,在配置的时候需要注意配置项目的命名规范以及所属环境,
命名规范:项目名称-test、项目名称-pro
比如:jdzsoftware-test、jdzsoftware-pro

阅读全文

javascript与dart的差异对比

一、入口函数

很多程序入口都是从main函数开始,所以dart也不例外,一起来看下百变的main函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//main标准写法
void main() {
print('Hello World!');//注意: Dart和Java一样表达式以分号结尾,写习惯Kotlin的小伙伴需要注意了, 这可能是你从Kotlin转Dart最大不适之一。
}

//dart中void类型,作为函数返回值类型可以省略
main() {
print('Hello World!');
}

//如果函数内部只有一个表达式,可以省略大括号,使用"=>"箭头函数;
//而对于Kotlin则是如果只有一个表达式,可以省略大括号,使用"="连接,类似 fun main(args: Array<String>) = println('Hello World!')
void main() => print('Hello World!');

//最简写形式
main() => print('Hello World!');

阅读全文

flex布局 justify-content:space-between; 解决最后一排数量不够自动向两端排列问题

flex 布局两端对齐当最后一排数量不够时,会出现以下布局情况
原图
flex 布局两端对齐
实现效果
flex 布局两端对齐

阅读全文

JS的事件循环(Event Loop)机制

前言

JS单线程、JS的事件循环(Event Loop)、执行栈、任务队列(消息队列)、主线程、宏队列(macrotask)、微队列(microtask),前端er相信很多人对这些词并不陌生,即便对js的api熟能生巧,但是却并不理解这些机制流程的话,那可能JS的提升很难了,这里也是属于提升JS的一个分水岭,在介绍这些概念之前,我们先思考几个非常经典的面试题,答案最后公布,看完这篇文章,或许就能够焕然大悟:透过现象看本质!
注:本章所有环境都是基于浏览器环境,暂不考虑node环境;
题目一:

阅读全文

css文本超出显示省略号详解

重点:text-overflow: ellipsis;只对display:inline;起作用
例子:

1
<span class="a">我说说<b class="b">打瞌睡党风建设打火机</b>说说色儿</span>

阅读全文

React使用pubsub事件订阅进行组件间通信

PubSub使用方式

1、react导入库

1
npm install pubsub-js --save

阅读全文

Git rebase命令的使用

基本

git rebase用于把一个分支的修改合并到当前分支。
假设你现在基于远程分支”origin”,创建一个叫”mywork”的分支。

1
$ git checkout -b mywork origin

阅读全文

React兄弟组件之间通信

Event Emitter/Target/Dispatcher

阅读全文

前端必须掌握的ES5、ES6的7种继承

众所周知,在ES6之前,前端是不存在类的语法糖,所以不能像其他语言一样用extends关键字就搞定继承关系,需要一些额外的方法来实现继承。下面就介绍一些常用的方法,红宝书已经概括的十分全面了,所以本文基本就是对红宝书继承篇章的笔记和梳理。

原型链继承

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function Parent() {
this.name = 'arzh'
}

Parent.prototype.getName = function () {
console.log(this.name)
}

function Child() {

}

//主要精髓所在
Child.prototype = new Parent()
Child.prototype.constructor = Child

var arzhChild = new Child()

arzhChild.getName() // 'arzh'

阅读全文

antd中带Form表单的Modal

在当前页面弹出一个带 Form 表单的 Modal 是一个很常见的场景。

只需要在 Form 表单外面包一个 Modal 就行了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
class ContactForm extends React.Component {
render() {
const {getFieldDecorator} = this.props.form;
const formItemLayout = {
labelCol: {span: 6},
wrapperCol: {span: 18},
};

return (
<Modal
width={740}
title={this.props.title}
visible={this.props.visible}
confirmLoading={this.props.confirmLoading}
onOk={this.props.handleSave}
okText='保存'
cancelText='返回'
onCancel={this.props.onCancel}
>
<Form>
{getFieldDecorator('id')(
<Input type='hidden'/>
)}
<Row gutter={16}>
<Col span={12}>
<Form.Item {...formItemLayout} label='姓名'>
{getFieldDecorator('name', {
rules: [
{required: true, message: '请输入姓名',}
]
})(
<Input placeholder='请输入'/>
)}
</Form.Item>
</Col>
<Col span={12}>
<Form.Item {...formItemLayout} label='公司'>
{getFieldDecorator('company')(
<Input placeholder='请输入'/>
)}
</Form.Item>
</Col>
</Row>
</Form>
</Modal>
);
}
}

阅读全文

Android Cordova 权限申请

Android6.0以上系统对于一些权限需要使用时申请,个人在网上找了好久 最后找到的一个最简便的方法

需要插件:cordova-plugin-android-permissions

用法:

1
2
3
4
5
6
7
var permissions = cordova.plugins.permissions;
//校验权限
permissions.checkPermission(permission, successCallback, errorCallback);
//申请权限
permissions.requestPermission(permission, successCallback, errorCallback);
//申请权限集合
permissions.requestPermissions(permissions, successCallback, errorCallback);

阅读全文

Cordova踩坑历程

随着前端技术的发展,现在国内外都涌现出了许多移动应用混合开发框架。比如国外的 PhoneGap / Cordova, Ionic, Meteor, 微软收购的 Xamarin 和 国内的 MUI, APICloud, WeX5, 以及最近阿里刚发布的 Weex 等等。

当然这些框架各有特点,但是目前比较成熟的解决方案个人认为还是 Ionic + PhoneGap / Cordova。

阅读全文