增加 User Model
1 | class CustomUser(AbstractUser): |
配置setting.py
AUTH_USER_MODEL = ‘app_name.CustomUser’
1 | class CustomUser(AbstractUser): |
AUTH_USER_MODEL = ‘app_name.CustomUser’
1 | sudo yum install -y nginx |
启动Nginx
1 | sudo systemctl start nginx |
访问localhost, 测试是否启动成功
1 | # For more information on configuration, see: |
1 | root /usr/share/nginx/html; |
1 | nginx -c nginx.conf |
1 | sudo pacman -S nginx-mod-echo |
location [=|~|~*|^~] /uri/ { … }
规则 | 作用 |
---|---|
= /uri | 表示精确匹配,只有完全匹配上才能生效 |
^~ /uri | 对URL路径进行前缀匹配,并且在正则之前 |
~ pattern | 表示区分大小写的正则匹配 |
~* pattern | 表示不区分大小写的正则匹配 |
/uri | 不带任何修饰符,也表示前缀匹配,但是在正则匹配之后 |
/ | 通用匹配,任何未匹配到其它location的请求都会匹配到,相当于switch中的default |
前缀匹配时,Nginx 不对 url 做编码,因此请求为 /static/20%/aa,可以被规则 ^~ /static/ /aa 匹配到(注意是空格)
匹配顺序
当有匹配成功时候,停止匹配,按当前匹配规则处理请求
注意:前缀匹配,如果有包含关系时,按最大匹配原则进行匹配。比如在前缀匹配 location /dir01 与 location /dir01/dir02,如有请求 http://localhost/dir01/dir02/file 将最终匹配到 location /dir01/dir02
匹配规则如下
1 | location = / { |
访问路径 | 示例路径 | 匹配规则 | 说明 |
---|---|---|---|
/ | localhost | 规则A | |
/login | localhost/login | 规则B | |
/static/a.html | localhost/static/a.html | 规则C | |
/static/files/a.exe | localhost/static/files/a.exe | 规则X | 虽然 规则C 也能匹配到,但因为最大匹配原则,最终选中了 规则X |
/a.gif | localhost/a.gif | 规则D | |
/a.PNG | localhost/a.PNG | 规则E | 规则E 不区分大小写 |
/b.png | localhost/b.png | 规则D | 规则D 顺序优先,规则E 不起作用 |
/static/c.png | localhost/static/c.png | 规则C | 优先匹配到 规则C |
/img/a.gif | localhost/img/a.gif | 规则D | 规则Y 也可以匹配上,但是因为正则匹配优先,而忽略了规则Y |
/img/a.tiff | localhost/img/a.tiff | 规则Y | |
/register | localhost/register | 规则F | |
/category/id/1111 | localhost/category/id/1111 | 规则F |
nginx 作为 http 服务器的强项
方式一:目录匹配1
2
3location ^~ /static/ {
root /webroot/static/;
}
方式二:后缀匹配1
2
3location ~* \.(gif|jpg|jpeg|png|css|js|ico)$ {
root /webroot/res/;
}
转发动态请求到后端应用服务器
1 | location / { |
直接匹配网站根,通过域名访问网站首页比较频繁,使用这个会加速处理。这里是直接转发给后端应用服务器了,也可以是一个静态首页
1 | location = / { |
检查步骤
关闭SELinux
检查用户权限, 确认配置文件里面的user是否有权限访问路径
测试路径:http://localhost/proxy/test.html
1 | location /proxy/ { |
实际访问路径为 http://127.0.0.1:8000/test.html
如果去掉末尾 /
1 | location /proxy { |
实际访问路径为 http://127.0.0.1:8000/proxy/test.html
代理地址不包含 /
1 | location /proxy/ { |
实际访问路径:http://127.0.0.1:8000/proxy/api/test.html
代理地址包含 /
1 | location /proxy/ { |
1 | #定义Nginx运行的用户和用户组 |
方式一:1
2
3# main 格式化方式
access_log /dev/stdout main;
error_log /dev/stderr main;
注意,在Docker中
/var/log/nginx/access.log -> /dev/stdout
/var/log/nginx/error.log -> /dev/stderr
方式二:1
2ln -sf /dev/stdout /var/log/nginx/access.log
ln -sf /dev/stderr /var/log/nginx/error.log
参考链接:http://www.oschina.net/translate/nginx-setup?print
1 | events { |
worker_connections:一个worker进程同时打开的最大连接数,最大客户数也由系统的可用socket连接数限制(~ 64K)。
multi_accept:如果设置为on,告诉nginx收到一个新连接通知后接受尽可能多的连接。
1 | http { |
server_tokens 并不会让nginx执行的速度更快,但它可以关闭在错误页面中的nginx版本数字,这样对于安全性是有好处的。
sendfile可以让sendfile()发挥作用。sendfile()可以在磁盘和TCP socket之间互相拷贝数据(或任意两个文件描述符)。Pre-sendfile是传送数据之前在用户空间申请数据缓冲区。之后用read()将数据从文件拷贝到这个缓冲区,write()将缓冲区数据写入网络。sendfile()是立即将数据从磁盘读到OS缓存。因为这种拷贝是在内核完成的,sendfile()要比组合read()和write()以及打开关闭丢弃缓冲更加有效。
tcp_nopush 告诉nginx在一个数据包里发送所有头文件,而不一个接一个的发送
tcp_nodelay 告诉nginx不要缓存数据,而是一段一段的发送–当需要及时发送数据时,就应该给应用设置这个属性,这样发送一小块数据信息时就不能立即得到返回值。
gzip是告诉nginx采用gzip压缩的形式发送数据。这将会减少我们发送的数据量。
gzip_min_length设置对数据启用压缩的最少字节数。如果一个请求小于1000字节,我们最好不要压缩它,因为压缩这些小的数据会降低处理此请求的所有进程的速度。
gzip_comp_level设置数据的压缩等级。这个等级可以是1-9之间的任意数值,9是最慢但是压缩比最大的。我们设置为4,这是一个比较折中的设置。
gzip_type设置需要压缩的数据格式。
1 | server { |
代理服务器有很多种,大体来说有http,ftp,socks代理三种,其中又分透明代理和不透明代理。其中透明代理一般是网关,是硬件。所以这里讨论不透明代理。
当机器通过代理服务器上网时。通讯是分两次的,先是机器和代理服务器通讯,再是代理服务器和目的地址通讯。
用http代理上网的过程如下:
机器和代理服务器建立TCP连接。
机器发出GET命令给代理服务器(这时GET命令中包含URL或IP地址,数据是明文)。
代理服务器将其中的URL转换为IP地址,可能会有DNS。将源数据包中的数据拷贝下来。去掉URL,重新组包,再发出去。
http (get)
http (connect)
ftp (user user@host:port)
ftp (user user@host port)
ftp (open host)
ftp (site host)
ftp (site user@host)
socks5
socks4
这些代理方式都有一个特点:在连接时,都会先和代理服务器连接,发出请求,一般为 command url,command就是get,connect,user 等。http和ftp都一样,可以通过关键字来识别。而且url是明文。Socks有些特别。它不是明文的,而是十六进制数据。要获得IP地址,还要经过转换。
Nginx版本 >= 1.13,但是并不会默认安装,需要在编译时通过指定 –with-stream 参数来激活这个模块。
1 | user root; |
1 | FROM nginx |
1 | docker run --name nginx_proxy -d --rm -p 8000:8000 image:nginx |
dd if=path/fedora.iso of=/dev/sdX
注意:
if指向的是iso镜像 of指向的是写入目标;
of的指向目标是整个磁盘,比如是/dev/sde,而不是类似/dev/sde1这样的某个磁盘分区;
创建分区
1 | fdisk /dev/vdb |
查看新分区/dev/vdb1,fisk -l
1 | Disk /dev/vdb: 20 GiB, 21474836480 bytes, 41943040 sectors |
如果想查看文件系统,可以使用df -Th。
1 | # 或者mkfs.ext3 |
1 | # 备份 etc/fstab:运行命令 |
例如,对指定IP上所有的保留TCP端口做了一次扫描,-v表示用详细模式。
1 | nmap -v IP |
输出结果1
2
3PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
例如,扫描指定范围
1 | nmap -p 1024-65535 IP |
Hping是一个命令行下使用的TCP/IP数据包组装/分析工具,其命令模式很像Unix下的ping命令,但是它不是只能发送ICMP回应请求,它还可以支持TCP、UDP、ICMP和RAW-IP协议,它有一个路由跟踪模式,能够在两个相互包含的通道之间传送文件。
Hping常被用于检测网络和主机,其功能非常强大,可在多种操作系统下运行,如Linux,FreeBSD,NetBSD,OpenBSD,Solaris,MacOs X,Windows。
主要功能
https://blog.csdn.net/freeking101/article/details/72582964
https://www.hi-linux.com/posts/57862.html
发送ICMP测试包
1 | sudo hping www.baidu.com -1 |
1 | brew install mtr |
mtr ip
输出结果说明
1 | Host Loss% Snt Last Avg Best Wrst StDev |
ping命令用来测试主机之间网络的连通性。执行ping指令会使用ICMP传输协议,发出要求回应的信息,若远端主机的网络功能没有问题,就会回应该信息,因而得知该主机运作正常。
1 | telnet IP PORT |
打印Linux中网络系统的状态信息,可让你得知整个Linux系统的网络情况。
1 | apt install net-tools |
查看指定端口的进程
查看80端口
1 | netstat -an | grep ":80" |
查看所有端口
1 | netstat -a |
查看监听端口
1 | # 查看所有监听端口 |
查看监听端口与进程
1 | # 查看所有端口 |
等价 ifconfig
1 | netstat -ie |
Brook 是一个高效的 Socks5 代理软件,官方支持Windows、Linux、MacOS、IOS、Android、树莓派等设备,同时是使用 Golang 语言编写,安装、使用异常简单。
Brook 支持 自主研发 Brook 协议+Stream Brook 协议、Shadowsocks 协议、SOCKS5 协议、TCP/UDP 转发、SOCKS5代理转HTTP代理 等功能。
Brook 支持 UDP转发,无需任何设置。
支持单端口和多端口(每个端口可以单独设定密码),这点类似于 Shadowsocks 和 ShadowsocksR 的单用户服务端。
Github项目:https://github.com/txthinking/brook
CentOS 6+ / Debian 6+ / Ubuntu 14.04 +
推荐 Debian 7 x64,脚本在这个系统上面出错率最低。
1 | wget -N --no-check-certificate https://softs.fun/Bash/brook.sh && chmod +x brook.sh && bash brook.sh |
运行下载的 Brook客户端后,右下角托盘图标会有一个黑色的钥匙。
右键托盘图标,选择 Setting 选项,然后浏览器就会就会自动打开一个网页:http://local.txthinking.com:1980/
这个网页就是 Brook的控制面板了。
1 | brook client -l 127.0.0.1:1080 -i 127.0.0.1 -s server_address:port -p password |