ngnix简单入门

nginx是一个高性能的、可靠的http中间件和代理服务器。作为一个有志气的前端切图仔,终于迈出了nginx第一步!
在这里进行一下 nginx的总结。

起步

其实我也不知道如何起步!先买个云主机服务器吧,阿里云,腾讯云都可以。可以买个按流量或者按小时的,就自己拿来玩玩!

操作系统:

CentOS OS 7.4 64位

关闭iptables 防火墙

  • 停止防火墙 systemctl stop firewalld.service
  • 永久关闭防火墙 systemctl disable firewalld.service

  • 安全增强型 Linux(Security-Enhanced Linux)简称 SELinux,它是一个 Linux 内核模块,也是 Linux 的一个安全子系统。

  • SELinux 主要作用就是最大限度地减小系统中服务进程可访问的资源(最小权限原则)
功能 命令
检查状态 getenforce
检查状态 /usr/sbin/sestatus -v
临时关闭 setenforce 0
永久关闭 /etc/selinux/config SELINUX=enforcing改为SELINUX=disabled

安装依赖模块

yum -y install gcc gcc-c++ autoconf pcre pcre-devel make automake
yum -y install wget httpd-tools vim

nginx的优势

  1. IO多路复用 多个描述符的IO操作都能在一个线程里并发交替顺序完成,复用线程
  2. CPU亲和 一种把CPU核心和Nginx工作进程绑定方式,把每个worker进程固定在一个CPU上执行,减少切换CPU和提交缓存命中率,获得更好的性能。
  3. sendfile 零拷贝传输模式

ngnix安装

版本

  • Mainline version 开发版
  • Stable version 稳定版 (推荐)
  • Legacy versions 历史版本

    下载地址

CentOS下yum安装

  1. 编辑配置文件: vi /etc/yum.repos.d/nginx.repo 打开并编辑,没有的话会创建
  2. 将一下复制到上面配置文件中

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1

  1. 安装ngnix

    yum install nginx -y
    nginx -v 查看版本
    nginx -V 查看想象版本

启动并重新加载

systemctl restart nginx.service
systemctl reload nginx.service
nginx -s reloadd

使用ngnix

配置日志


tail -f /var/log/nginx/access.log 监控日志

静态资源web服务器

类型 种类
浏览器渲染 HTML、CSS、JS
图片 JPEG、GIF、PNG
视频 FLV、MPEG
下载文件 Word、Excel

cdn配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 设置图片资源配置 
location ~ .*\.(jpg|png|gif)$ {
gzip off; # 是否启动压缩
gzip_http_version 1.1; # 压缩版本
gzip_comp_level 3; # 压缩等级
gzip_types image/jpeg image/png image/gif; # 压缩请求头
root /data/images; # 静态图片资源访问路径
}
# 设置html,js,css 静态资源配置
location ~ .*\.(html|js|css)$ {
gzip on; # 是否启动压缩
gzip_min_length 1k; #
gzip_http_version 1.1;
gzip_comp_level 9;
gzip_types text/css application/javascript;
root /data/html;
}
# 设置下载目录
location ~ ^/download {
gzip_static on; # 启动下载,默认先着 .gz 的文件 进行下载
tcp_nopush on;
root /data/download;
}

设置浏览器缓存

1
2
3
location ~ .*\.(jpg|png|gif)$ {
expires 24h;
}

跨域

1
2
3
4
5
6
7
location ~ .*\.json$ {
add_header Access-Control-Allow-Origin http://localhost:3000;
add_header Access-Control-Allow-Methods GET,POST,PUT,DELETE,OPTIONS;
add_header Access-Control-Allow-Headers Content-Type;
add_header Access-Control-Credentials:true;
root /data/json;
}
1
2
3
4
5
6
7
8
let xhr = new XMLHttpRequest()
xhr.open('GET','http://192.144.148.135/data.json',true)
xhr.onreadystatechange = function(){
if(xhr.readyState ==4 && xhr.status == 200){
document.querySelector('#user').innerHTML=JSON.parse(xhr.responseText).name
}
}
xhr.send()

防盗链

1
2
3
4
5
6
7
8
9
10
11
12
13
location ~ .*\.(jpg|png|gif)$ {
expires 1h;
gzip off;
gzip_http_version 1.1;
gzip_comp_level 3;
gzip_types image/jpeg image/png image/gif;
# 设置防盗链
valid_referers none blocked 47.104.184.134;
if ($invalid_referer) {
return 403;
}
root /data/images;
}

valid_referers none blocked serevr_names string

  • none 代表没有referer
  • blocked 代表有referer但是被防火墙或者是代理给去除了
  • string或者正在表达式 用来匹配referer
  • nginx会通过查看referer字段和valid_referers后面的referer列表进行匹配,如果匹配到了就invalid_referer字段值为0 否则设置该值为1
1
<img src="http://192.144.148.135/flower.jpeg" alt="">

代理服务

反向代理

反向代理的对象是服务端

  1. 先创建三个服务器

可以用pm2进行管理
3000.js

1
2
3
4
5
let http = require('http')
let server = http.createServer(function(req,res){
console.log('3000 start')
res.end(`3000 ${req.url}`)
}).listen(3000)

4000.js

1
2
3
4
5
let http = require('http')
let server = http.createServer(function(req,res){
console.log('4000 start')
res.end(`4000 ${req.url}`)
}).listen(4000)

5000.js

1
2
3
4
5
let http = require('http')
let server = http.createServer(function(req,res){
console.log('5000 start')
res.end(`5000 ${req.url}`)
}).listen(5000)

  1. nginx设置代理 在conf.d下创建代理配置文件

/nginx/conf.d/proxy.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
server {
listen 80;
server_name 3000.com;
location ~/api {
proxy_pass http://localhost:3000;
}
}
server {
listen 80;
server_name 5000.com;
location ~/api {
proxy_pass http://localhost:5000;
}
}
server {
listen 80;
server_name 4000.com;
location ~/api {
proxy_pass http://localhost:4000;
}
}

应用

  • 安全
  • 负载均衡
  • 虚拟主机
  • cdn的实现
  • http-proxy

正向代理

正向代理的对象是客户端

1
2
3
location / {
proxy_pass http://$http_host$request_uri;
}

应用:

  • 翻墙

坚持原创技术分享,您的支持是我前进的动力!