0%

解决Nginx 403报错问题

查看Nginx日志

1
vi /var/log/nginx/error.log
1
 open() "/data/www/1.txt" failed (13: Permission denied), client: 192.168.1.194, server: www.web1.com, request: "GET /1.txt HTTP/1.1", host: "www.web1.com"

打开日志发现报错Permission denied

排查方式

一、由于启动用户和nginx工作用户不一致所致

查看nginx的启动用户,发现是nobody,而为是用root启动的

1
ps aux | grep "nginx: worker process" | awk'{print $1}'

将nginx.config的user改为和启动用户一致

1
vi conf/nginx.conf
阅读全文 »

引子

CentOS 使用 ShadowSocks

安装pip

1
2
3
sudo yum -y install epel-release #首先安装epel扩展源:
sudo yum -y install python-pip #安装完扩展源后安装python-pip
sudo yum clean all #安装完清除cache

安装Shadowsocks

1
pip install shadowsocks

配置Shadowsocks

新建一个/etc/shadowsocks.json文件,里面写上如下配置

中文删除

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
{
"server":"your_server_ip",
#ss服务器IP
"server_port":your_server_port,
#端口
"local_address": "127.0.0.1",
#本地ip
"local_port":1080,
#本地端口
"password":"your_server_passwd",
#连接ss密码
"timeout":300,
#等待超时
"method":"rc4-md5",
#加密方式
"fast_open": false,
#true 或 false。如果你的服务器 Linux 内核在3.7+,可以开启 fast_open 以降低延迟。开启方法: echo 3 > /proc/sys/net/ipv4/tcp_fastopen 开启之后,将 fast_open 的配置设置为 true 即可
"workers": 1
#工作线程数
}

启动 Shadowsocks

1
sslocal -c /etc/shadowsocks.json

阅读全文 »

如何使用ADB

1. 开启ADB服务

1
2
3
4
$ adb devices
List of devices attached
* daemon not running; starting now at tcp:5037
* daemon started successfully
1
2
3
$ adb start-server
* daemon not running; starting now at tcp:5037
* daemon started successfully

2. 停止ADB服务

1
adb kill-server
阅读全文 »

讲解Gitlab 如何查看数据库,如何修改gitlab账户信息

如何查看gitlab数据库

gitlab 数据库配置位置

1
$gitlabRoot/gitlab-rails/etc/database.yml
1
cat /var/opt/gitlab/gitlab-rails/etc/database.yml

一般为下面情况

1
2
3
4
5
6
7
8
9
10
11
12
13
14
production:
adapter: postgresql
encoding: unicode
collation:
database: gitlabhq_production //数据库名
pool: 10
username: 'gitlab' //用户名
password:
host: '/var/opt/gitlab/postgresql' //主机
port: 5432
socket:
sslmode:
sslrootcert:
sslca:

阅读全文 »

简介

内容 主要介绍 PHP + Mysql 环境搭建

php 以前用过,时间长了,就忘记了,写个帖子,防止遗忘

获取

Docker大法好 多余内容省略

编写 docker-compose.yml

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
version: '3'

services:
nginx:
image: nginx:latest
ports:
- "80:80"
- "443:443"
volumes:
- ./code:/usr/share/nginx/html:rw
# nginx configs
#- ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
- ./nginx/conf.d:/etc/nginx/conf.d:ro
depends_on:
- phpfpm
links:
- phpfpm
container_name: search_ng
db:
image: mysql
container_name: search_db
ports:
- "3306:3306"
volumes:
- ./mysqldata:/var/lib/mysql:rw
environment:
- MYSQL_DATABASE=searchdb
- MYSQL_ROOT_PASSWORD=123456
phpfpm:
build: ./phpfpm
container_name: search_php
ports:
- "9000:9000"
volumes:
- ./code/:/usr/share/nginx/html:rw
# Your php.ini
- ./phpfpm/conf/php.ini-production:/usr/local/etc/php/php.ini:ro
depends_on:
- db
links:
- db
阅读全文 »

深度学习库,自己了解下

官网

安装

Windows 安装

我试了几次 pip3 安装
我的版本

  • Windows 7 64bit
  • python36 / pip3
  • torch-0.4.0
  • 未安装CUDA
1
2
pip3 install http://download.pytorch.org/whl/cu80/torch-0.4.0-cp36-cp36m-win_amd64.whl 
pip3 install torchvision
阅读全文 »

引子

由于平时一直使用docker build 命令才生成一个镜像,有时候由于代码跟新频繁就会产生很多的none的image,最近想着清除一下。
于是就写了以下脚本:

1
2
3
docker ps -a | grep "Exited" | awk '{print $1 }'|xargs docker stop
docker ps -a | grep "Exited" | awk '{print $1 }'|xargs docker rm
docker images -a|grep none|awk '{print $3 }'|xargs docker rmi
阅读全文 »

引子

给自己记录下,自己遇到的问题以及处理问题的办法

问题一:

问题情况如下:

  • 阿里云机器服务
  • 机器本身未开启防火墙
  • 可在机器上使用localhost访问web页面,但不能通过公网IP访问web页面

最后查到问题是

阿里云的后台有设置公网端口的 进出规则
只需要在阿里云后台设置下公网端口 就可以了

菜单组:

云服务器 -> 网络和安全 -> 安全组

如果没有就添加一个安全组

安全组具体端口权限

内网:进/出,公网:进/出

阅读全文 »

有很多场景和需求你需要用到手机设备的唯一标识符。

在Android中,有以下几种方法获取这样的ID。

  1. The IMEI: 仅仅只对Android手机有效:
1
2
TelephonyManager TelephonyMgr = (TelephonyManager)getSystemService(TELEPHONY_SERVICE); 
String szImei = TelephonyMgr.getDeviceId();

采用此种方法,需要在AndroidManifest.xml中加入一个许可:android.permission.READ_PHONE_STATE,并且用户应当允许安装此应用。作为手机来讲,IMEI是唯一的,它应该类似于 359881030314356(除非你有一个没有量产的手机(水货)它可能有无效的IMEI,如:0000000000000)。

  1. Pseudo-Unique ID, 这个在任何Android手机中都有效
    有一些特殊的情况,一些如平板电脑的设置没有通话功能,或者你不愿加入READ_PHONE_STATE许可。而你仍然想获得唯一序列号之类的东西。这时你可以通过取出ROM版本、制造商、CPU型号、以及其他硬件信息来实现这一点。这样计算出来的ID不是唯一的(因为如果两个手机应用了同样的硬件以及Rom 镜像)。但应当明白的是,出现类似情况的可能性基本可以忽略。要实现这一点,你可以使用Build类:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
String m_szDevIDShort = "35" + //we make this look like a valid IMEI 

Build.BOARD.length()%10 +
Build.BRAND.length()%10 +
Build.CPU_ABI.length()%10 +
Build.DEVICE.length()%10 +
Build.DISPLAY.length()%10 +
Build.HOST.length()%10 +
Build.ID.length()%10 +
Build.MANUFACTURER.length()%10 +
Build.MODEL.length()%10 +
Build.PRODUCT.length()%10 +
Build.TAGS.length()%10 +
Build.TYPE.length()%10 +
Build.USER.length()%10 ; //13 digits

大多数的Build成员都是字符串形式的,我们只取他们的长度信息。我们取到13个数字,并在前面加上“35”。这样这个ID看起来就和15位IMEI一样了。

阅读全文 »

引子

给Unity Dll 加密

软件环境

  • VirturlBox 虚拟机 5.10
  • 虚拟机 Centos 7 64bit 系统
  • Untiy 2017 版本

原理

Unity 编译代码会生成以下几个文件:

  1. Plugins 代码编译为 Assembly-CSharp-firstpass.dll
  2. Editor 代码会编译为 Assembly-CSharp-Editor.dll
  3. Plugins-Editor 代码会编译为 Assembly-CSharp-Editor-firstpass.dll
  4. 其他代码会编译为 Assembly-CSharp.dll

可以选择加密 Assembly-CSharp.dll 文件

加密完文件,要保证Unity能识别加载,需要二进制还原

Unity 使用libmono.so 加载DLL文件

Unity mono 源码

函数在 image.c 文件内,修改其中的 mono_image_open_from_data_with_name 方法

阅读全文 »