Nginx 常用操作的总结

news/2024/10/31 2:24:34/

一、安装

直接安装

yum install nginx –y

如果 yum 源缺失的话,如下更新 yum 源【未测试】

vim /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/\$releasever/\$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
yum list

二、静态资源

1. 简单使用

# 默认配置,监听 80 端口,请求到 "/usr/share/nginx/html;"
server {listen       	80;listen       	[::]:80;server_name  	_;root         	/usr/share/nginx/html;include 		/etc/nginx/default.d/*.conf;error_page 404 /404.html;location = /404.html {}error_page 500 502 503 504 /50x.html;location = /50x.html {}
}# 手动配置,监听 8080 端口,请求到 "/app/index.html"
server {listen 8080;server_name 8080_server;location / {root /app;index index.html;}
}

2. listen 和 server_name

listenserver_name
监听地址,可以是 [ip]:port自定义的名称,仅起标识作用,如果多个 server 的标识重复了,不会报错,而是是会根据优先级直接覆盖

3. location 参数

起到一个映射作用,将请求路径映射到目标资源

# 请求路径 ---> 目标资源
# http://domain ---> /app/index.html
server {listen 80;server_name index_server;location / {root /app;index index.html; # 如果请求路径为 http://www.bugu-blog.top,则请求会被映射到 "/app/index.html"}
}# 请求路径 ---> 目标资源
# http://domain:8081/css/common.css ---> /app/css/common.css
server {listen 8081;server_name css_server;location /css {root /app;}
}# 请求路径 ---> 目标资源
# http://domain:8082/images/a.png ---> /app/images/a.png
server {listen 8082;server_name image_server;location /images {root /app;}
}

4. 报错【403 forbidden】

多半是因为 root 参数设置的目录的访问权限不足,注意不要将 root 目录配置成 //root

三、反向代理

1. 正向代理与反向代理

区分代理的正反向就看 nginx 是和谁一伙的,它究竟是代表谁

nginx 代表客户端去访问服务端,客户端明确知道nginx就是自己这边的,那就是正向代理

nginx 代表服务端处理客户端请求,客户端根本不知道自己是在向 nginx 请求,那就是反向代理

2. proxy_pass 参数

作用:进行 HTTP 代理,转发请求

  • 如果 proxy-pass 的地址只配置到端口,不包含 / 或其他路径,那么 location 将被追加到转发地址中
  • 如果 proxy-pass 的地址包括 / 或其他路径,那么 location 将会被 proxy-pass 地址后面的参数替换
  • proxy_pass 后面必须跟上 /,否则会出错,并且注意配置目标地址的代理解析

location 追加到转发地址中

http://www.bugu-blog.top:8001/index.html ---> http://www.bugu-blog.top:8080/index.html

server {listen 8001;location / {proxy_pass http://www.bugu-blog.top:8080;}
}

location 追加到转发地址中

http://www.bugu-blog.top:8002/a/b/index.html ---> http://www.bugu-blog.top:8080/a/b/index.html

server {listen 8002;location /a/b {proxy_pass http://www.bugu-blog.top:8080;}
}

location 替换为转发地址后面的参数

http://www.bugu-blog.top:8003/a/b/index.html ---> http://www.bugu-blog.top:8080/index.html

server {listen 8003;location /a/b {proxy_pass http://www.bugu-blog.top:8080/;}
}

location 替换为转发地址后面的参数

http://www.bugu-blog.top:8004/index.html ---> http://www.bugu-blog.top:8080/a/b/index.html

server {listen 8004;location / {proxy_pass http://www.bugu-blog.top:8080/a/b/;}
}

location 替换为转发地址后面的参数

http://www.bugu-blog.top:8005/a/b/index.html ---> http://www.bugu-blog.top:8080/c/index.html

server {listen 8005;location /a/b {proxy_pass http://www.bugu-blog.top:8080/c/;}
}

3. 设置代理请求 headers【未测试】

‎用户可以重新定义或追加 header 信息传递给后端服务器。可以包含文本、变量及其组合。默认情况下,仅重定义两个字段:‎

# 设置 nginx 的主机地址为 proxy_pass 里配置的主机名和端口
proxy_set_header Host       $proxy_host;
proxy_set_header Connection close;

由于使用反向代理之后,后端服务无法获取用户的真实IP,所以,一般反向代理都会设置以下 header 信息

location /some/path/ {# 设置 nginx 的主机地址为 nginx 主机 IP 和端口proxy_set_header Host $http_host;# 设置用户端真实的 IP,即客户端 IP 为用户的真实 IP,即客户端 IPproxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_pass http://localhost:8088;
}

四、负载均衡

  • upstream 位于 http 上下文中,与 server 并列,不要放在 server
  • upstream 里面的 server 属性,语法格式为 ip/domain:port [weight= max_fails=3 fail_timeout=30s]
# 1. 监听 80 端口,监听客户端的访问,将请求代理到 "http://XXXXXXXXX"
server {listen 80;location / {proxy_pass http://XXXXXXXXX;}
}# 2. 接收代理过来的请求,根据机制转发到对应的服务器
upstream XXXXXXXXX {# round-robin # 默认采用轮循机制,所以可以省略不写# least-connected # 将下一个请求分配给活动连接数最少的服务器(较为空闲的服务器)# ip_hash # 客户端的 IP 地址将用作哈希键,来自同一个ip的请求会被转发到相同的服务器# 其他机制server 192.168.1.135:8080;server 192.168.1.135:8081;server 192.168.1.135:8082;
}# 3. 代理负载均衡分发过来的请求
server {listen 8080;location / {root /app;}
}
server {listen 8081;location / {root /app/a/b;}
}
server {listen 8082;location / {root /app/c;}
}

五、HTTPS

1. 生成证书

华为云生成 SSL 证书

  • server.crt
  • server.key

2. 配置 SSL

server {listen              443 ssl;server_name         XXXXXXXXXXXXXXXXXX;ssl_certificate     /app/server.crt;ssl_certificate_key /app/server.key;ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;ssl_ciphers         HIGH:!aNULL:!MD5;location / {proxy_pass http://www.bugu-blog.top:80; # 代理转发到 http 地址}
}

3. 重启 Nginx

systemctl restart nginx

六、参考

  • 视频

  • 文档


http://www.ppmy.cn/news/252333.html

相关文章

c++实现一个单门课程成绩管理系统

实验内容 实现一个单门课程成绩管理系统。进入系统时,用户可选择身份: 1.教师; 2 学生。 以教师身份进入后,如果上次已保存了数据,可将文件中数据读取出来,并 允许修改或添加新数据。如果为第一-次录入 (之前无保存的数据)&am…

软件开发报价的计算方法(转载)

软件开发报价的计算方法 (转载) 1.软件开发价格估算方法 软件开发价格与工作量、商务成本、国家税收和企业利润等项有关。为了便于计算,给出一个计算公式: 软件开发价格 = 开发工作量 开发费用/人月 1.1开…

自己换了空调滤芯,终于告别了泥土味

车开一年了,味道越来越大,只是一直苦于没时间,本周正好要保养了,下定决心一定要换掉,在TB买了两块空调滤,一块换,一块留着以后用,又买了一套螺丝刀,和一瓶空调管道清洗液…

软件开发报价的计算方法[转载]

1.软件开发价格估算方法 软件开发价格与工作量、商务成本、国家税收和企业利润等项有关。为了便于计算,给出一个计算公式: 软件开发价格 = 开发工作量 开发费用/人月 1.1开发工作量 软件开发工作量与估算工作量经验值…

格力与奥克斯空调在京东的选购指数(java爬虫案例-代码实现)

要么不做,要做就做完 此项目目录结构 项目分析 环境准备 开发准备 数据库表 添加依赖 添加配置文件 编写pojo 编写dao 编写service接口 service实现类 StringBoot引导类 封装Htmlunit 实现数据抓取 成功展示 这前段时间有一件事“格力举报奥克斯空调质…

不平衡报价的对策分析

正好赶上了个不平衡报价非常好的案例,和大家一起分析下。 先说什么是不平衡报价 不平衡报价法是相对通常的平衡报价(正常报价)而言的,是在工程项目的投标总价确定后,根据招标文件的付款条件,合理地调整投标文件中子项目的报价&…

SpringCloud-stream一体化MQ解决方案-基本配置篇

参考资料: 参考demo 参考视频1 参考视频2 官方文档(推荐) 官方文档中文版 关于Kafka和rabbitMQ的安装教程,见本人之前的博客 rocketMq的安装教程 rocketMq仪表盘安装教程 重!!!

软件开发报价

1.软件开发价格估算方法 软件开发价格与工作量、商务成本、国家税收和企业利润等项有关。为了便于计算,给出一个计算公式: 软件开发价格 = 开发工作量 开发费用/人月 1.1开发工作量 软件开发工作量与估算工…