Nginx的安装与常用配置
前言:本文是基于虚拟机上的centOS 7对Nginx的安装,可以使用
uname -a
查看centOS系统版本,本文用来记录安装nginx的步骤和相关命令,方便日后使用时查看。
Nginx的安装与运行
去官网https://nginx.org/下载对应的nginx包,推荐使用稳定版本,本文下载的nginx-1.18.0.tar.gz
上传nginx到linux系统
安装依赖环境
安装gc环境
yum install gcc-c++
安装PCRE库,用于解析正则表达式
yum install -y pcre pcre-devel
zlib压缩和解压缩依赖
yum install -y zlib zlib-devel
SSL安全的加密的套接字协议层,用于HTTP安全传输,也就是https
yum install -y openssl openssl-devel
解压,需要注意,解压后得到的是源码,源码需要编译后才能安装
tar -zxvf nginx-1.18.0.tar.gz
编译之前,先创建nginx 临时目录,如果不创建,在启动nginx的过程中会报错
mkdir /var/temp/nignx -p
在nginx目录,输入如下命令进行配置,目的是为了创建makefile文件
./configure \ --prefix=/usr/local/nginx \ --pid-path=/var/run/nginx/nginx.pid \ --lock-path=/var/lock/nginx.lock \ --error-log-path=/var/log/nginx/error.log \ --http-log-path=/var/log/nginx/access.log \ --with-http_gzip_static_module \ --http-client-body-temp-path=/var/temp/nginx/client \ --http-proxy-temp-path=/var/temp/nginx/proxy \ --http-fastcgi-temp-path=/var/temp/nginx/fastcqi \ --http-uwsgi-temp-path=/var/temp/nginx/uwsgi \ --http-scgi-temp-path=/var/temp/nginx/scgi
注∶
\
代表在命令行中换行,用于提高可读性配置命令 :
命令 解释 -prefix 指定nginx安装目录 -pid-path 指向nginx的pid -lock-path 锁定安装文件,防止被恶意篡改或误操作 -error-log 错误日志 -http-log-path http日志 -with-http_gzip_static_module 启用gzip模块,在线实时压缩输出数据流 -http-client-body-temp-path 设定客户端请求的临时目录 -http-proxy-temp-path 设定http代理临时目录 -http-fastcgi-temp-path 设定fastcgil临时目录 -http-uwsgi-temp-path 设定fastcgil临时目录 -http-scgi-temp-path 设定scgi临时目录
make编译
make
安装
make install
进入sbin目录启动nginx
./nginx
- 停止:
./nginx -s stop
- 重载:
./nginx -s reload
- 停止:
打开浏览器,访问虚拟机所处内网ip即可打开nginx默认页面,显示如下便表示安装成功∶
注意事项:
- 如果在云服务器安装,需要开启默认的nginx端口∶80
- 如果在虚拟机安装,需要关闭防火墙
- 查看防火墙状态:
firewall-cmd --state
- 停止防火墙:
systemctl stop firewalld.service
- 禁止防火墙开机启动:
systemctl disable firewalld.service
- 重启防火墙:
firewall-cmd --reload
- 查看防火墙状态:
- 本地win或mac需要关闭防火墙
Nginx常用配置
Nginx的配置文件结构
设置worker进程的用户,指的linux中的用户,会涉及到nginx操作目录或文件的一些权限,默认为 nobody
user root;
worker进程工作数设置,一般来说CPU有几个,就设置几个,或者设置为N-1也行。
worker_processes 1;
nginx日志级别
debug |info |notice |warn | error | crit 丨 alert | emerg
,错误级别从左到右越来越大#error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info;
设置nginx进程 pid
pid logs/nginx.pid;
设置工作模式
events {# 默认使用epolL use epoll;# 每个worker允许连接的客户端最大连接数worker_connections 1024; }
http 是指令块,针对http网络传输的一些指令配置
http {}
include引入外部配置,提高可读性,避免单个配置文件过大
include mime.types;
设定日志格式,
main
为定义的格式名称,如此access_log
就可以直接使用这个变量了#log_format main '$remote_addr - $remote_user [$time_local] "$request" ' # '$status $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$http_x_forwarded_for"';#access_log logs/access.log main;
参数名 参数意义 $remote_addr 客户端ip $remote_user 远程客户端用户名,一般为:‘-’ $time_local 时间和时区 $request 请求的url以及method $status 响应的状态码 $body_bytes_sent 响应客户端内容字节数 $http_referer 记录用户从哪个链接跳过来 $http_user_agent 用户所使用的代理,一般来时都是浏览器 $http_x_forwarded_for 通过代理服务器来记录客户端的ip sendfile
使用高效文件传输,提升传输性能。启用后才能使用tcp_nopush
,是指当数据表累积一定大小后才发送,提高了效率。
sendfile on;
tcp_nopush on;
keepalive_timeout
设置客户端与服务端请求的超时时间,保证客户端多次请求的时候不会重复建立新的连接,节约资源损耗。#keepalive_timeout 0; keepalive_timeout 65;
gzip 启用压缩,html/js/css压缩后传输会更快
#gzip on;
server
可以在http
指令块中设置多个虚拟主机- listen 监听端口
- server_name localhost、ip、域名
- location请求路由映射,匹配拦截
- root 请求位置
- index 首页设置
server {listen 80;server_name localhost;location / {root html;index index.html index.htm;}#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;}}
Nginx日志切割
手动切割
现有的日志都会存在 access.log 文件中,但是随着时间的推移,这个文件的内容会越来越多,体积会越来越大,不便于运维人员,查看,所以我们可以通过把这个大的日志文件切割为多份不同的小文件作为日志,切割规则可以以天 为单位,如果每天有几百G或者几个T的日志的话,则可以按需以每半天 或者 每小时 对日志切割一下。
具体步骤如下∶
- 到nginx的sbin目录,创建一个shell可执行文件∶
cut_my_log.sh
,内容为∶
#!/bin/ bash
L0G_PATH="/var/log/nginx"
RECORD_TIME=$(date -d "yesterday" +%Y-%m-%d+%H:%M)
PID=/var/run/nginx/nginx.pid
mv ${LOG_PATH}/access.log ${LOG_PATH}/access.${RECORD_TIME}.log
mv ${LOG_PATH}/error.log ${LOG_PATH}/error.${RECORD_TIME}.log
#向Nginx主进程发送信号,用于重新打开日志文件
kill -USR1 `cat $PID`
为
cut_my_log.sh
添加可执行的权限∶chmod +x cut_my_log.sh
测试日志切割后的结果∶
./cut_my_Log.sh
定时切割:使用定时任务
安装定时任务∶
yum install crontabs
crontab -e
编辑并且添加一行新的任务∶*/1 * * * * /usr/local/nginx/sbin/cut_my_log.sh
重启定时任务∶
service crond restart
● 附∶常用定时任务命令∶
service crond start //启动服务
service crond stop //关闭服务
service crond restart //重启服务
service crond reload //重新载入配置
crontab -e //编辑任务
crontab -l //查看任务列表
定时任务表达式∶
Cron表达式分为5或6个域,每个域代表一个含义,如下所示∶
取值范围 | 分 | 时 | 日 | 月 | 星期几 | 年(可选) |
---|---|---|---|---|---|---|
取值范围 | 0-59 | 0-23 | 1-31 | 1-12 | 1-7 | 2020/2021/2022/… |
常用表达式∶
- 每分钟执行∶
*/1 * * * *
- 每日凌晨(每天晚上23∶59)执行∶
59 23 * * *
- 每日凌晨1点执行∶
0 1 * * *
root 与 alias
假如服务器路径为∶/home/imooc/files/img/face.png
root 路径完全匹配访问
配置的时候为∶
location /imooc {root /home }
用户访问的时候请求为∶url:port/imooc/files/img/face.png
alias 可以为你的路径做一个别名,对用户透明
配置的时候为∶
location /hello {alias /home/imooc
}
用户访问的时候请求为∶url:port/hello/files/img/face.png,如此相当于为目录 imooc做一个自定义的别名。
使用GZIP压缩提升请求效率
# 开启gzip压缩功能,目的∶提高传输效率,节约带宽
gzip on;
# 限制最小压缩,小于1字节文件不会压缩
gzip_min_length 1;
# 定义压缩的级别(压缩比,文件越大,压缩越多,但是cpu使用会越多)
gzip_comp_level 3;
# 定义压缩文件的类型
gzip_types text/plain application/javascript application/x-javascript text/css applicatio n/xmL text/javascript application/x-httpd-php image/jpeg image/gif image/png application/jison;
location匹配规则解析
空格
∶默认匹配,普通匹配location / {root /home }
=
∶精确匹配。location = /imooc/img/face1.png {root /home; }
~*
∶匹配正则表达式,不区分大小写# 符合图片的显示 location ~* \.(GIF|jpg|png|jpeg){root /home; }
~
∶匹配正则表达式,区分大小写# GIF必须大写才能匹配到 location ~ \.(GIF|jpg|png|jpeg){root /home; }
^~
∶以某个字符路径开头location ^~ /imooc/img {root /home; }
使用SwitchHosts模拟本地域名解析
下载SwitchHosts工具添加配置:192.168.170.129 www.baidu.com
,或者找到本机的hosts文件,添加这行配置,本地域名就模拟好了,如下:
Nginx跨域配置支持
#允许跨域请求的域,*代表所有
add_header 'Access-Control-Allow-Origin' *;
#允许带上cookie请求
add_header 'Access-Control-Allow-Credentials' 'true';
#允许请求的方法,比如 GET/POST/PUT/DELETE
add_header 'Access-Control-Allow-Methods' *;
#允许请求的header
add_header 'Access-Control-Allow-Headers' *;
Nginx防盗链支持
为了 保证自己网站的静态资源不能被其它网站引用,我们可以在nginx中做如下配置:
#对源站点验证
valid_referers *.imooc.com;
#非法引入会进入下方判断
if ($invalid_referer) { return 404;
}
Nginx负载均衡
OSI 网络模型
在讲到Nginx负载均衡的时候,其实Nginx是七层负载均衡,后续我们还会涉及到LVS,是四层负载均衡,七层和四层是什么概念呢?这就必须提到网络模型。网络模型是计算机网络基础的一部分内容,一般大学计算机系都会讲到此知识点,并且会作为考点;其实在面试过程中有时候也会被问到。所以我们还是有必要来复习或学习一下这块的一些重要知识的。
网络模型就是 OSI(0pen System Interconnect),意思为 开放网络互联 ,是由国际标准化组织(ISO)和国际电报电话咨询委员会(CCITT)共同出版的,他是一种网络互联模型,也是一种规范。
网络模型分为七层,也就是当用户发起请求到服务器接收,会历经七道工序,或者说用户利用互联网发送消息给另一个用户,也会历经七道工序。这七层可以分为如下∶
层级 | 名称 | 说明 |
---|---|---|
第七层 | 应用层 | 与用户行为交互 |
第六层 | 表示层 | 定义数据格式以及数据加密 |
第五层 | 会话层 | 创建、管理以及销毁会话 |
第四层 | 传输层 | 创建、管理请求端到响应端(端到端)的连接 |
第三层 | 网络层 | 请求端的IP地址 |
第二层 | 数据链路层 | 提供介质访问与链路管理 |
第一层 | 物理层 | 传输介质,物理媒介 |
以上七层每层可以与上下相邻层进行通信。每一层都是非常复杂的,我们不在这里深究,我们以举例的形式来阐述每一层是干嘛的。
应用层: 这是面向用户的,最靠近用户,为了让用户和计算机交互,在计算机里会有很多软件,比如eclipse,idea,qq,微信,淘宝等,这些都是应用软件,用户可以通过这些应用软件和计算机交互,交互的过程其实就是接口的调用,应用层为用户提供了交互的接口,以此为用户提供交互服务。那么在这一层最常见的协议有∶HTTP,HTTPS,FTP,SMTP,POP3等。Nginx在本层,为七层负载均衡。
举例∶我要寄一封信给远在天边的老外LiLei,我会打开快递软件下单,这个时候我是 用户,快递软件就是 应用服务,是建立在计算机上的,提供给用户交互的一种服务或称之为手段。
表示层: 该层提供数据格式编码以及加密功能,确保 请求端 的数据能被 响应端 的应用层识别。
举例∶我写中文给LiLei,他看不懂,这个时候我就会使用翻译软件把中文翻译成英文,随后信中涉及到一些比较隐私的信息我会加密一下,这个时候翻译软件和加密器就充当了 表示层 的作用,他用于显示用户能够识别的内容。
会话层: 会话可以理解为session,请求发送到接受响应的这个过程之间存在会话,会话层就充当了这一过程的管理者,从创建会话到维护会话最后销毁会话。
举例∶我每次写信给LiLei都会记录在一个小本本上,寄信时间日期,收信时间日期,这本小本本上存有每次通信记录,这个小本本就相当于是一个会话的管理者。又或者说,我们平时在打电话,首先需要拨打电话,这是 建立会话 ,对方接听电话,此时正在通话(维持并管理会话),通话结束后会话销毁 ,那么这也是一次会话的生命周期。
传输层: 该层建立端到端的连接,他提供了数据传输服务,在传输层通信会涉及到端口号,本层常见的协议为TCP、UDP,LVS就是在传输层,也就是四层负载均衡。
举例∶我和LiLei通信过程中会借助快递公司,快递公司会分配快递员取件和寄件,那么这个快递员则充当 传输层 的斋田。
网络层: 网络通信的时候必须要有本机IP和对方的IP,请求端和响应端都会有自己的IP的,IP就相当于你家地址门牌号,在网络上云服务器有固定的公网IP,普通计算机也有,只不过是动态IP,运营商每天会分配不同的IP给你的计算机。所以网络层也能称之为IP层,IP是互联网的基础根本。能提供IP分配的设备则为路由器或交换机。
举例∶对于拥有固定IP的云服务来说,他们都是由腾讯云、阿里云等这样的供应商提供的,他们为云服务器提供固定ip ;电信、移动、联调等运营商为你的计算机动态分配ip,每天都不同;则这些供应商和运营商都是网络层。同理,快递员由物流公司分配和管理,那么物流公司就是 网络层 咯。
数据链路层: 这一层会提供计算机MAC地址,通信的时候会携带,为了确保请求投递正确,所以他会验证检测MAC 地址,以确保请求响应的可靠性。
举例∶快递员在投递派送的时候,他(或客服)会预先提前打电话给你,确认你家地址对不对、有没有人、货到付款有没有准备好钱等等,这个时候快递员(或客服)就充当了数据链路层 的职责。
物理层∶ 端到端请求响应过程中的媒介,物理介质,比如网线、中继器等等设备,都是你在端到端交互过程中不可缺少的基础设备。
举例∶快递员在投递的过程中,你写的信会历经一些交通运输工具,比如首先通过飞机运输到国外,在海关统一拿到信以后会通过汽车运输到LiLei所在城市的物流集散地,最后快递员通过三轮电频车寄到LiLei家里,这个时候,飞机、汽车、三轮电瓶车都是 物理层 的媒介。
负载均衡策略:
轮询:轮询是Nginx负载均衡的默认策略。使用场景:针对每个服务器硬件配置一样。
加权轮询(weight):根据设置的权重值去分配处理请求的数量。使用场景:服务器硬件配置有差异,让好的服务器去处理更多的请求。
ip_hash:对请求用户的IP地址进行hash运算后得到的值,再对服务器数量进行取模运算。让同一用户的请求落到固定的服务器上。这样就可以保证用户访问可以请求到上游服务中的固定的服务器,前提是用户ip没有发生更改。使用ip hash的注意点∶不能把后台服务器直接移除,只能标记 down .
upstream tomcats {ip_hash;server 192.168.1.173:8080;server 192.168.1.174:8080 down;server 192.168.1.175:8080; }
一致性哈希算法:让每台服务器IP的hash值落在哈希环节点上,在用户请求到Nginx时,根据顺时针就近原则落到最近的服务器节点。
url_hash:根据每次请求的url地址,hash后访问到固定的服务器节点。
upstream tomcats {# url hashhash $request_uri;# 最少连接数# least_Connserver 192.168.1.173:8080;server 192.168.1.174:8080;server 192.168.1.175:8080; }server {listen 80;server_name www.tomcats.Com;location / {proxy_pass http://tomcats;} }
upstream指令参数
max_conns:限制每台server的连接数,用于保护避免过载,可起到限流作用。测试参考配置如下∶
# worker进程设置1个,便于测试观察成功的连接数 worker_processes 1;upstream tomcats {server 192.168.1.173:8080 max_conns=2;server 192.168.1.174:8080 max_conns=2;server 192.168.1.175:8080 max_conns=2; }
slow_start:商业版,需要付费。配置参考如下:
upstream tomcats {server 192.168.1.173:8080 weight=6 slow_start=60server 192.168.1.174:8080 weight=2;server 192.168.1.175:8080 weight=2; }
- 该参数不能使用在 hash 和 random Load balancing 中。
- 如果在 upstream 中只有一台server,则该参数失效。
down、backup
down 用于标记服务节点不可用∶
upstream tomcats {server 192.168.1.173:8080 down;server 192.168.1.174:8080 weight=1;server 192.168.1.175:8080 weight=1; }
表示当前服务器节点是备用机,只有在其他的服务器都宕机以后,自己才会加入到集群中,被用户访问到
upstream tomcats {server 192.168.1.173:8080 backup;server 192.168.1.174:8080 weight=1;server 192.168.1.175:8080 weight=1; }
**注意:**backup参数不能使用在 hash 和 random Load balancing 中。
max_fails、fail_timeout
max_fails∶表示失败几次,则标记server已宕机,剔出上游服务。
fail_timeout∶表示失败的重试时间。假设目前设置如下∶
max_fails=2 fail_timeout=15s
则代表在15秒内请求某一server失败达到2次后,则认为该server已经挂了或者宕机了,随后再过15秒,这15秒内不会有新的请求到达刚刚挂掉的节点上,而是会请求到正常运作的server,15秒后会再有新请求尝试连接挂掉的server,如果还是失败,重复上一过程,直到恢复。
Keepalived 提高吞吐量
keepalived
∶ 设置长连接处理的数量
proxy_http_version
∶设置长连接http版本为1.1
proxy_set_header
∶清除connection header信息
upstream tomcats {#server 192.168.1.173:8080 max_fails=2 failtimeout=1s;server 192.168.1.190:8080;#server 192.168.1.174:8080 weight=1;server 192.168.1.175:8080 weight=1;keepalive 32
}server {listen 80;server_name: www.tomcats.com;location / {proxy_pass http://tomcats;proxy_http_version 1.1;proxy_set_header Connection "";}
}
Nginx的缓存
浏览器缓存:加速用户访问,提升单个用户(浏览器访问者)体验,缓存在本地
Nginx缓存:
- 缓存在nginx端,提升所有访问到nginx这一端的用户
- 提升访问上游(upstream)服务器的速度
- 用户访问仍然会产生请求流量
控制浏览器缓存
location /files {alias /home/imooc;# expires 10s;# expires @22h30m;# expires -1h;# expires epoch;# expires off;expires max; }
Nginx的反向代理缓存
# proxy_cache_path 设置缓存目录#
# keys_zone 设置共享内存以及占用空间大小
# max_size 设置缓存大小
# inactive 超过此时间则被清理
# use_temp_path 临时目录,使用后会影响nginx性能
proxy_cache_path /usr/local/nginx/upstream_cache keys_zone=mycache:5m max_size=1g inactive=1m use_temp_path=off;
location / {proxy_pass http://tomcats;# 启用缓存,和keyS_zone一致proxy_cache mycache;# 针对200和304状态码缓存时间为8小时proxy_cache_valid 200 304 8h;
使用Nginx配置HTTPS域名证书
安装SSL模块:要在nginx中配置https,就必须安装ssl模块,也就是∶
http_ssl_module
。进入到nginx的解压目录∶
/home/software/nginx-1.16.1
新增ssl模块(原来的那些模块需要保留)
./configure \ --prefix=/usr/local/nginx \ --pid-path=/var/run/nginx/nginx.pid \ --lock-path=/var/lock/nginx.lock \ --error-log-path=/var/Log/nginx/error.log \ --http-log-path=/var/log/nginx/access.log \ --with-http_gzip_static_module \ --http-client-body-temp-path=/var/temp/nginx/client \ --http-proxy-temp-path=/var/temp/nginx/proxy \ --http-fastcgi-temp-path=/var/temp/nginx/fastcgi \ --http-uwsgi-temp-path=/var/temp/nginx/uwsgi \ --http-scgi-temp-path=/var/temp/nginx/scgi \ --with-http_ssl_module
编译和安装
make make install
配置HTTPS
把ssl证书
*.crt
和私钥*.key
拷贝到/usr/local/nginx/conf
目录中。新增 server 监听 443端口∶
server {listen 443;server_name www.imoocdsp.com;# 开启sslssl on;# 配置ssl证书ssl_certificate 1_www.imoocdsp.com_bundle# 配置证书秘钥ssl_certificate_key 2_www.imoocdsp.com.key;# ssl会话ssl_session_cache shared:SSL:1m# ssl会话超时时间ssl_session_timeout 5m;# 配置加密套件,写法遵循 openssl 标准ssl_protocols TLSv1 TLSv1.1 TLSv1.2;ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!ssl_prefer_server_ciphers on;location / {proxy_pass http://tomcats/;index index.html index.htm;} }
reload nginx:
./nginx -s reload
附:腾讯云Nginx配置https文档地址
Nginx的安装与常用配置相关推荐
- JetBrains软件安装及常用配置
JetBrains软件安装及常用配置 Date:2021-01-13 1 安装 JetBrains提供的软件十分好用,在此记录安装以及常用设置,方便之后查看 Jetbrains官网 产品介绍如下: W ...
- ubuntu doxygen 安装与常用配置
ubuntu doxygen 安装与常用配置 ubuntu 安装与使用doxygen 安装doxygen 安装Graphviz 生成doxygen配置文件 常用配置 根据配置生成doxygen文档 u ...
- Nginx下载安装及简单配置
Nginx下载安装及简单配置 下载 配置Nginx 下载 Nginx官网下载路径 解压后目录如下: 配置Nginx 打开 conf/nginx.conf 配置文件 添加一个server,进行简单的测试 ...
- Nginx的启动安装和常用配置例子
概述 由于自己的之前学习 nginx 只会简单使用,然后每次配置 nginx 都要找文档去了解怎么配置,有点麻烦,所以这里记录下一些常用的nginx 配置和配置的例子,到时候直接 copy 修改即可 ...
- Nginx 集群安装以及常用配置详解开机自启动
Nginx 配置文件详解 main: 全局配置 event: 配置工作模式以及连接数 http: http 模块相关配置 server 虚拟主机配置,可以有多个 location 路由规则,表达式 u ...
- nginx服务(五)_常用配置指令介绍
Main 全局配置段常见的配置指令分类 文档: https://nginx.org/en/docs/ngx_core_module.html#accept_mutex 分类: 正常运行必备的配置 优化 ...
- Arch Linux的安装与常用配置
制作安装镜像U盘 镜像系统配置 联网 虚拟机或网线 dhcpcd WiFi systemctl start wpa_supplicant.service nmcli dev wifi list nmc ...
- Nginx的原理、常用配置和生产案例应用
目录 Nginx的概念 Nginx的系统架构 Nginx的服务过程 Nginx.conf配置讲解 自定义日志格式 Location语法 Nginx的具体应用 一.Nginx+Lua实现动态黑名单 二. ...
- windows环境Nginx下载安装及简单配置
一.下载安装 Nginx官网:http://nginx.org/en/download.html 打开官网,我们选择稳定的Windows版本下载,然后解压. 解压后目录如下: 二.配置Nginx 安装 ...
最新文章
- mysql %用户域_MySQL运维---用户权限及管理
- NLP, 知识图谱参考资源
- jquery.MultiFile 实现自动删掉上传列表
- mysql sql优化器_MySQL SQL优化之‘%’
- 20110126 学习记录:一些关于html中布局的代码 CSS hack速查表
- hihocoder1089 Floyd算法
- 组件php53 php55区别,分享下php5类中三种数据类型的区别
- request payload怎么发_做了一个个人博客,但不知道怎么介绍
- python删除文件夹中的jpg_python删除文件夹下相同文件和无法打开的图片
- 卫星地图上有没有UFO影像?
- c语言 sendto函数,在sendto()函数中发送一个结构 - C语言
- 宇宙简史——星光中有什么秘密?
- 《Linux C/C++服务器开发实践》简介
- leaflet地图生成图片下载
- airpak模拟案例,Airpak模拟教程-体育馆通风模拟案例-CFD数值模拟教程airpak.pdf
- String------字符串的字母大小写切换及获取
- C++ 哈希的应用(补充)
- 初学Pybugthon头秃笔记(四)——自底向上执行自定义模块问题
- css制作搜索栏(仿google)
- unity3d各种OpenFileDialog操作
热门文章
- 零基础入门python好学么
- 【C++】复制省略(Copy elision)
- linux通过文件修改密码,如何通过Linux系统来修改密码
- 怎么制作证件照电子版?安利下面这三款软件给你
- pageoffice在线打开word文件加盖电子印章
- Hibernate: null java.sql.SQLException: 要执行的 SQL 语句不得为空白或空值
- 微信小程序(八)实战——加载图片images
- php wx.downloadimage,大神,wx.downloadImage 图片过期问题
- 【原神】各角色Pixiv涩图统计(一). 最多的是谁? R18涩图谁最多?
- 2021涅普冬令营Misc笔记与题解