nginx入门之基础配置
1、配置文件
nginx 的配置文件是 /etc/nginx/nginx.conf,其目录结构大致为:
main #全局配置,对全局生效
events { #nginx工作模式配置,配置影响 Nginx 服务器或与用户的网络连接
}
http { #http设置,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置
....
server { #服务器主机配置,配置虚拟主机的相关参数,一个 http 块中可以有多个 server 块
....
location { # 路由配置server块可以包含多个location块,location指令用于匹配uri
....
}
location path {
....
}
location otherpath {
....
}
}
server {
....
location {
....
}
}
upstream name { # 负载均衡配置
....
}
}
配置语法:
- 每条配置以分号结尾;
- 指令快用 {} 将多条指令集合在一起;
- 可以使用 include 语句引进其它配置文件;
- 使用 # 添加注释;
- 视同 $ 使用变量;
- 部分指令参数支持正则;
2、典型配置
# 每个指令必须有分号结束
user administrator administrators; #配置用户或者组,默认为nobody nobody。
worker_processes 2; #允许生成的进程数,默认为1,一般设置和cpu核数一样
pid /nginx/pid/nginx.pid; #指定nginx进程运行文件存放地址
#制定日志路径,级别。这个设置可以放入全局块,http块,server块,级别以此为:debug|info|notice|warn|error|crit|alert|emerg
error_log log/error.log debug;
events {
accept_mutex on; #设置网路连接序列化,防止惊群现象发生,默认为on
multi_accept on; #设置一个进程是否同时接受多个网络连接,默认为off
#use epoll; #事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport
worker_connections 1024; #最大连接数,默认为512
}
http {
include mime.types; #文件扩展名与文件类型映射表
default_type application/octet-stream; #默认文件类型,默认为text/plain
#access_log off; #取消服务日志
log_format myFormat '$remote_addr–$remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for'; #自定义格式
access_log log/access.log myFormat; #combined为日志格式的默认值
sendfile on; #允许sendfile方式传输文件,默认为off,可以在http块,server块,location块。
sendfile_max_chunk 100k; #每个进程每次调用传输数量不能大于设定的值,默认为0,即不设上限。
keepalive_timeout 65; #连接超时时间,默认为75s,可以在http,server,location块。
upstream mysvr {
server 127.0.0.1:7878;
server 192.168.10.121:3333 backup; #热备
}
error_page 404 https://www.baidu.com; #错误页
server {
keepalive_requests 120; #单连接请求上限次数。
listen 4545; #监听端口
server_name 127.0.0.1; #监听地址
location ~*^.+$ { #请求的url过滤,正则匹配,~为区分大小写,~*为不区分大小写。
#root path; #根目录
#index vv.txt; #设置默认页
proxy_pass http://mysvr; #请求转向mysvr 定义的服务器列表
deny 127.0.0.1; #拒绝的ip
allow 172.18.5.54; #允许的ip
}
}
}
2.1、server配置
需要注意 server 里面的 listen 和 server_name 的用法
- listen 并不是端口,可以使用ip接端口,但是这样就只能单一的匹配了,所以一般只写端口;
- 如果listen配置域名加端口,则 server_name 配置无意义;
- server_name 配置域名(ip),支持多个域名;
初学者可能会有疑问,为什么需要支持多个域名/IP,反正进入到nginx里面的,肯定是服务器的IP。
因为
- 一台服务器是可以配置多个IP的;
- 一个ip是可以绑定多个域名的;
3、全局变量
nginx 有一些常用的全局变量,可以在配置文件中的任意位置使用
| 全局变量 | 描述 |
|---|---|
| $host | 请求信息中的HOST,如果没有,则等于设置的服务器名,不包含端口 |
| $request_method | 客户端请求类型,GET/POST等 |
| $remote_addr | 客户端IP |
| $args | 请求中的参数 |
| $arg_PARAMETER | GET请求中变量PARAMETER参数值 如$http_user_agent(Uaer-Agent值) |
| $content_length | 请求头中的 Content-length 字段 |
| $http_user_agent | 客户端agent信息 |
| $http_cookie | 客户端cookie信息 |
| $remote_addr | 客户端的IP地址 |
| $remote_port | 客户端的端口 |
| $server_protocol | 请求使用的协议,如HTTP/1.0 |
| $server_addr | 服务器地址 |
| $server_name | 服务器名称 |
| $server_port | 服务器端口 |
| $scheme | HTTP方法(如http、https) |
4、配置代理
server {
listen 8081;
server_name localhost;
location / {
proxy_pass http://192.168.54.139;
}
}
上例中,如果请求的ip和端口匹配到,则请求会转发到 http://192.168.54.139
4.1、反向代理配置
两个域名指向同一台nginx服务器,用户访问不同的路径,显示不同的内容
server {
listen 8081;
server_name localhost;
location ~ /edu/ {
proxy_pass http://www.baidu.com;
}
location ~ /vod/ {
proxy_pass http://www.qq.com;
}
}
上例中,localhost:8081/edu 和 localhost/8081/vod 请求分别转达到不同的服务器
当然,也可以配置多个server
upstream tomcat1{
server 192.168.10.182:80;
}
server {
listen 80;
server_name www.123.com;
location / {
proxy_pass http://tomcat1;
}
}
upstream tomcat1{
server 192.168.10.182:81;
}
server {
listen 80;
server_name www.456.com;
location / {
proxy_pass http://tomcat2;
}
}
上例中,可以修改host文件实现域名和ip的映射
5、负载均衡
5.1、轮询
upstream tomcat2 {
server 192.168.10.182:8081;
server 192.168.10.182:8082;
server 192.168.10.182:8083;
}
server {
listen 80;
server_name www.123.com;
location / {
proxy_pass http://tomcat2;
}
}
轮询默认权重都是1,服务器请求的默认顺序是123123123
5.2、加权轮询
upstream tomcat2 {
server 192.168.10.182:8081;
server 192.168.10.182:8082 weight=2;
server 192.168.10.182:8083;
}
上例中,为一个服务提供了三台服务器来实现负载均衡
可根据服务器的配置情况调整权重,不配置则默认1,权重越低,请求越少。
5.3、热备
upstream tomcat2 {
server 192.168.10.182:8081;
server 192.168.10.182:8082 backup;
}
当第一台服务器出问题时,启用第二台服务器,顺序是1111111,1挂了,22222
5.4、ip_hash
upstream tomcat2 {
server 192.168.10.182:8081;
server 192.168.10.182:8082;
ip_hash;
}
nginx 会让相同客户端ip请求相同的服务器
5.5、其它参数
nginx的负载均衡还有一些其它状态参数详解,比如:
- down:表示当前的server暂时不参与负载均衡;
- backup:预留的备份及其,其它非备份及其出现故障或者忙的时候,才会请求备份及其,因此,此及其压力最轻;
- max_fails:允许请求失败的次数,默认为1,当超过最大次数时,返回proxy_next_upstream模块定义的错误;
- fail_timeout:在经历了max_fails次失败之后,暂停服务的时间,max_fails可以和fail_timeout一起使用;
示例:
upstream tomcat2 {
server 192.168.10.182:8081 weight=2 max_fails=2 fail_timeout=2;
server 192.168.10.182:8082 weight=1 max_fails=2 fail_timeout=1;
}
nginx入门之基础配置的更多相关文章
- Nginx入门--从核心配置与动静分离开始
写在前面 优化我们项目,服务器部署,不仅仅可以是分布式,Nginx一样可以通过动静分离,负载均衡来减轻我们服务器的压力.Nginx的知识链,学习周期相对比较长,博主也是刚刚入门,这篇就先从实现基础的动 ...
- Nginx入门篇-基础知识与linux下安装操作
我们要深刻理解学习NG的原理与安装方法,要切合实际结合业务需求,应用场景进行灵活使用. 一.Nginx知识简述Nginx是一个高性能的HTTP服务器和反向代理服务器,也是一个 IMAP/POP3/SM ...
- Nginx简介与基础配置
何为Nginx? Nginx ("engine x") 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器.最初是为了解决C10k的问题,由Igor ...
- Nginx入门笔记之————配置文件结构
在nginx.conf的注释符号位# nginx文件的结构,这个对刚入门的同学,可以多看两眼. 默认的config: #user nobody; worker_processes ; #error_l ...
- 最全面 Nginx 入门教程 + 常用配置解析
转自 http://blog.csdn.net/shootyou/article/details/6093562 Nginx介绍和安装 一个简单的配置文件 模块介绍 常用场景配置 进阶内容 参考资料 ...
- 【转】【Nginx】Nginx 入门教程 + 常用配置解析
== Nginx介绍和安装 == Nginx是一个自由.开源.高性能及轻量级的HTTP服务器及反转代理服务器, 其性能与IMAP/POP3代理服务器相当.Nginx以其高性能.稳定.功能丰富.配置简单 ...
- nginx安装及基础配置(含jdk安装及配置)
0.jdk安装配置 #下载相应的jdk软件包,然后解压安装,我这里包名称为:jdk-7u25-linux-x64.tar.gz tar -xzf jdk-7u25-linux-x64.tar.gz m ...
- Nginx 平滑升级、Nginx的一些基础配置
# Nginx 平滑升级 # 方案一:使用Nginx服务信号进行升级 # 1.将就版本的sbin目录下可执行nginx进行备份(mv nginx nginxold) # 2.将新版本 configur ...
- nginx入门到精通目录
1.nginx入门篇 nginx安装与基础配置 nginx优化配置分析与说明 nginx模块结构 2.nginx功能篇 配置nginx的gzip功能 配置nginx的rewrite功能 配置nginx ...
- 超详细Nginx的安装和配置教程
一. 编译安装nginx 下载nginx安装包 wget http://nginx.org/download/nginx-1.8.0.tar.gz 也可以选择其他版本,官网:http://nginx. ...
随机推荐
- C# 内存缓存工具类 MemoryCacheUtil
C# 内存缓存工具类 MemoryCacheUtil using System; using System.Collections.Concurrent; using System.Collectio ...
- 为什么 Go 和 Rust 语言都舍弃了继承?
为什么go和rust语言都舍弃了继承? 舍弃了 Class 舍弃或弱化子类型 类的继承是一段儿弯路 OO 发明了继承,然后发现真正有意义的是 interface 的组合(更准确的说,是 Product ...
- AcWing 每日一题 - Summer
本篇解题记录题源来自 AcWing 的 Summer 每日一题 补题链接:Here 2021/07/01 done Week 1 星期一 AcWing 3485. 最大异或和 (Hard 思路 先求出 ...
- Goolge Kick Start Round A 2020 (A ~ D题题解)
比赛链接:kick start Round A 2020 A. Allocation 题目链接 题意 给出 \(N\) 栋房子的价格,第 \(i\) 栋房子的价格为 \(A_i\),你有 \(B\) ...
- cs 保研经验贴 | 数学试题 · 自动化所特供版
据(2022 年我所看的)往年经验,自动化所比较重视数学. 感觉,按照自动化所的数学题库复习,就足以应付大多数夏令营的笔试面试了. 目录 高等数学 线性代数 概率论 机器学习 复变函数 其他 同站相关 ...
- Vue2.x项目整合ExceptionLess监控
前言 一直以来我们都是用Sentry做项目监控,不过前段时间我们的Sentry坏掉了(我搞坏的) 但监控又是很有必要的,在sentry修好之前,我想先寻找一个临时的替代方案,同时发现网上关于Excep ...
- JVM的GC学习
JVM的GC学习 2023-12-28T17:20:25.182+0800: 7.363: [Full GC (Metadata GC Threshold) [PSYoungGen: 29067K-& ...
- PG数据库存储验证
PG数据库存储验证 背景 最近学习了SQLServer数据库的varchar和nvarchar的存储 想到PG数据库其实没让选择字符集,也没有nvarchar 所以想学习一下nvarchar的使用情况 ...
- SQLServer数据库JDBC连接串参数的简单学习
SQLServer数据库JDBC连接串参数的简单学习 背景 前段时间一直跟同事一起处理SQLServer 比其他数据库的deadlock更多的问题. 涉及到了几个驱动的参数. 想着问题基本上告一段落, ...
- [转帖]Prometheus系列之Grafana 版本9.0.0 设置Email邮件报警实战
目录 1. 配置文件conf/defaults.ini修改 2. Grafana Web页面配置报警邮箱接收者 3. 创建Dashboard 4. 创建Alert的文件夹 5. 设置Notificat ...