layout: post

title: Nginx-扫盲

category: Nginx

tags: [代理]

Nginx 基本安装和配置文件讲解

简介

  • 轻量级web服务器、反向代理服务

  • 负载均衡策略,使用软件负载均衡

安装步骤

  • wget下载 http://nginx.org/download/nginx-1.12.1.tar.gz
  • 进行解压:tar -zxvf nginx-1.12.1.tar.gz
  • 下载所需要的依赖:
    • yum -y install pcre pcre-devel
    • yum -y install zlib zlib-devel
  • 进行 configure 配置:cd nginx-1.12.1 && ./configure
  • 编译和安装:make && make install
  • 启动 Nginx
    • cd /usr/loal/nginx 目录下:看到 4 个目录
    • conf 配置文件、html 网页文件、logs 日志文件、sbin 主要二进制程序
    • 启动命令:/usr/local/nginx/sbin/nginx 关闭 (-s stop) 重启 (-s reload)
  • 成功:查看是否成功(netstat -ano | grep 80),失败可能 80 端口被占用
  • 浏览器直接访问:http://127.0.0.1:80

Nginx 日志管理

Nginx 访问日志放在 logs/host.access.log 下,并且使用 main 格式(还可以使用自定义格式)

对于 main 格式如下定义:

log_format main '$remote_addr - $remote_user[$time_local] "$request"'
'$status $body_bytes_sent "$http_referer"'
'"$http_user_agent" "$http_x_forwarded_for"'

查看日志:tail -n 100 -f nginx/logs/access.log

定时任务去执行日志的备份:

  • crontab -e
  • */1 * * * * sh /usr/local/nginx/sbin/log.sh

location 语法:表示 uri 方式定位

基础语法有三种:

  • location = pattern {} 精准匹配

  • location pattern {} 一般匹配

  • location ~ pattern {} 正则匹配

Nginx 配置文件

#user  nobody;

#开启进程数 <=CPU数
worker_processes 1; #错误日志保存位置
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info; #进程号保存文件
#pid logs/nginx.pid; #每个进程最大连接数(最大连接=连接数x进程数)每个worker允许同时产生多少个链接,默认1024
events {
worker_connections 1024;
} http {
#文件扩展名与文件类型映射表
include mime.types;
#默认文件类型
default_type application/octet-stream; #日志文件输出格式 这个位置相于全局设置
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; #打开发送文件
sendfile on;
#tcp_nopush on; #keepalive_timeout 0;
#连接超时时间
keepalive_timeout 65; #打开gzip压缩
#gzip on; #设定请求缓冲
#client_header_buffer_size 1k;
#large_client_header_buffers 4 4k; #设定负载均衡的服务器列表
#upstream myproject {
#weigth参数表示权值,权值越高被分配到的几率越大
#max_fails 当有#max_fails个请求失败,就表示后端的服务器不可用,默认为1,将其设置为0可以关闭检查
#fail_timeout 在以后的#fail_timeout时间内nginx不会再把请求发往已检查出标记为不可用的服务器
#} #webapp
#upstream myapp {
# server 192.168.1.171:8080 weight=1 max_fails=2 fail_timeout=30s;
# server 192.168.1.172:8080 weight=1 max_fails=2 fail_timeout=30s;
#} #配置虚拟主机,基于域名、ip和端口
server {
#监听端口
listen 80;
#监听域名
server_name localhost; #charset koi8-r; #nginx访问日志放在logs/host.access.log下,并且使用main格式(还可以自定义格式)
#access_log logs/host.access.log main; #返回的相应文件地址
location / {
#设置客户端真实ip地址
#proxy_set_header X-real-ip $remote_addr;
#负载均衡反向代理
#proxy_pass http://myapp; #返回根路径地址(相对路径:相对于/usr/local/nginx/)
root html;
#默认访问文件
index index.html index.htm;
} #配置反向代理tomcat服务器:拦截.jsp结尾的请求转向到tomcat
#location ~ \.jsp$ {
# proxy_pass http://192.168.1.171:8080;
#} #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;
} # proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#} # deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
} #虚拟主机配置:
server {
listen 1234;
server_name bhz.com;
location / {
#正则表达式匹配uri方式:在/usr/local/nginx/bhz.com下 建立一个test123.html 然后使用正则匹配
#location ~ test {
## 重写语法:if return (条件 = ~ ~*)
#if ($remote_addr = 192.168.1.200) {
# return 401;
#} #if ($http_user_agent ~* firefox) {
# rewrite ^.*$ /firefox.html;
# break;
#} root bhz.com;
index index.html;
} #location /goods {
# rewrite "goods-(\d{1,5})\.html" /goods-ctrl.html;
# root bhz.com;
# index index.html;
#} #配置访问日志
access_log logs/bhz.com.access.log main;
} # another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias; # location / {
# root html;
# index index.html index.htm;
# }
#} # HTTPS server
#
#server {
# listen 443 ssl;
# server_name localhost; # ssl_certificate cert.pem;
# ssl_certificate_key cert.key; # ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m; # ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on; # location / {
# root html;
# index index.html index.htm;
# }
#} }

Nginx 语法:

  • if (条件为: =~~*)、return 、break、rewrite

  • -f 是否为文件、-d 是否为目录、-e 是否为存在

  • nginx 可以对数据进行压缩,对一些图片、html、css、js等文件进行缓存,从而实现动静分离等优化功能,在网站做优化的时候非常有用

  • Nginx 反向代理 proxy 与 负载均衡 upstream

  • 配置反向代理 proxy:proxy_pass url地址

  • 配置负载均衡 upstream: upstream

  • 注意:反向代理之后获取客户端 IP 地址为 nginx 服务器地址,这里需要 nginx 进行 forward,设置真实的 IP 地址

  • 设置客户端真实 IP 地址

    proxy_set_header X-real-ip $remote_addr

nginx 支持的三种虚拟主机的配置:

  • 基于 IP 的虚拟主机
  • 基于域名的虚拟主机
  • 基于端口的虚拟主机

Nginx 配置文件中,每个 server 就是一个虚拟主机

基于 IP 的虚拟主机

server {
listen 80;
server_name 192.168.31.88; location / {
root html;
index index.html index.htm
}
}

基于域名的虚拟主机配置

server {
listen 80;
server_name www.holddie.com; location / {
root test1;
index.html index.htm
}
} server {
listen 80;
server_name blog.holddie.com; location / {
root test2;
index.html index.htm
}
}

基于端口的虚拟主机配置

server {
listen 88;
server_name localhost; location / {
root test3;
index.html index.htm
}
} server {
listen 89;
server_name localhost; location / {
root test4;
index.html index.htm
}
}

Nginx 反向代理

为了方便测试修改 Hosts文件。

127.0.0.1 www.test1.com
127.0.0.1 www.test2.com 开启两台Tomcat
127.0.0.1:8080
127.0.0.1:9090

配置如下:

#代理 tomcat1
upstream tomcat_server1 {
server 127.0.0.1:8080
} #代理 tomcat2
upstream tomcat_server2 {
server 127.0.0.1:9090
} #配置虚拟主机
server {
listen 80;
server_name www.test1.com location / {
#root html_port
proxy_pass http://tomcat_server1;
index index.html index.htm
}
} server {
listen 80;
server_name www.test2.com location / {
#root html_port
proxy_pass http://tomcat_server2;
index index.html index.htm
}
}

Nginx 负载均衡

127.0.0.1 www.test3.com

开启两台Tomcat
127.0.0.1:8080
127.0.0.1:9090

配置文件:

#代理 tomcat2 服务器
upstream tomcat_server_pool {
server 127.0.0.1:8080 weight=1;
server 127.0.0.1:9090 weight=2;
} #配置虚拟主机
server {
listen 80;
server_name www.test3.com location / {
proxy_pass http://tomcat_server_pool
index index.html index.htm
}
}

Nginx 扫盲的更多相关文章

  1. Spring Boot2 系列教程(二十七)Nginx 极简扫盲入门

    上篇文章和大家聊了 Spring Session 实现 Session 共享的问题,有的小伙伴看了后表示对 Nginx 还是很懵,因此有了这篇文章,算是一个 Nginx 扫盲入门吧! 基本介绍 Ngi ...

  2. Nginx 极简入门教程!

    上篇文章和大家聊了 Spring Session 实现 Session 共享的问题,有的小伙伴看了后表示对 Nginx 还是很懵,因此有了这篇文章,算是一个 Nginx 扫盲入门吧! 基本介绍 Ngi ...

  3. [转载]Nginx如何处理一个请求

    http://nginx.org/cn/docs/http/request_processing.html 对我的扫盲文章 基于名字的虚拟主机 Nginx首先选定由哪一个虚拟主机来处理请求.让我们从一 ...

  4. Nginx反向代理实现Tomcat负载均衡

    这篇短文主要介绍Tomcat的集群和用Nginx反向代理实现Tomcat负载均衡. 1.首先需要对一些知识点进行扫盲(对自己进行扫盲,囧): 集群(Cluster) 简单来说就是用N台服务器构成一个松 ...

  5. SpringCloud笔记一:扫盲

    目录 前言 什么是微服务? 微服务的优缺点是什么? 微服务之间是如何通讯的? SpringCloud和Dubbo有哪些区别? SpringCloud和SpringBoot的关系? 什么是服务熔断?什么 ...

  6. H5视频直播扫盲

    H5视频直播扫盲 2016-05-25 • 前端杂项 • 14 条评论 • lvming19901227 视频直播这么火,再不学就out了. 为了紧跟潮流,本文将向大家介绍一下视频直播中的基本流程和主 ...

  7. 使用Nginx实现服务器反向代理和负载均衡

    前言 同事总问我Nginx做反向代理负载均衡的问题,因此特意留下一篇扫盲贴! 直接部署服务器的风险 假设,我开发了一个网站,然后买了一台Web服务器和一台数据库服务器,直接部署到公共网络上.如下图,网 ...

  8. [转帖]技术扫盲:新一代基于UDP的低延时网络传输层协议——QUIC详解

    技术扫盲:新一代基于UDP的低延时网络传输层协议——QUIC详解    http://www.52im.net/thread-1309-1-1.html   本文来自腾讯资深研发工程师罗成的技术分享, ...

  9. HTML5视频直播及H5直播扫盲

    章来源:http://geek.csdn.net/news/detail/95188 分享内容简介: 目前视频直播,尤其是移动端的视频直播已经火到不行了,基本上各大互联网公司都有了自己的直播产品,所以 ...

随机推荐

  1. Docker系列(十):Kubernetes集群入门

    kubenetes安装 官网:https://github.com/kubernetes/kubernetes/blob/release-1.0/docs/getting-started- guide ...

  2. java浮点运算的陷阱

    首先呢,i你要明白double和float. Inifinity: 例如:syso(5.0/0.0+" 和"+0.0 /0.0); 浮点运算的0.0不是真正意义上的0,而是非常接近 ...

  3. Js中获取时间 new date()的用法

    Js中获取时间 new date()的用法 获取时间: var myDate = new Date();//获取系统当前时间 myDate.getYear(); //获取当前年份(2位) myDate ...

  4. 牛客NOIP暑期七天营-TG3 赛后题解

    目录 牛客NOIP暑期七天营-提高组3 A-破碎的矩阵 题目描述 link 题解 代码 B-点与面 题目描述 link 题解 代码 C-信息传递 题目描述 link 题解 牛客NOIP暑期七天营-提高 ...

  5. OpenGL学习笔记2017/8/29

    OpenGL学习日志: 感谢doing5552 的OpenGL入门学习:http://www.cppblog.com/doing5552/archive/2009/01/08/71532.html 相 ...

  6. csp-s模拟测试51(b)attack,tree题解

    题面:https://www.cnblogs.com/Juve/articles/11598286.html attack: 支配树裸题? 看一下支配树是什么: 问题:我们有一个有向图(可以有环),定 ...

  7. 关于MySQL IN LIKE OR使用索引的问题

    以前在网上看了一些资料,有些人说话不严谨,导致一直被误导,最近在实际开发中发现一些结论有问题,因此特地整理了一下,防止下次继续犯错. 以下前提是有对这个字段建立索引(简直废话,没建的肯定不会使用索引啊 ...

  8. 关于解码芯片SAA7115及7105的配置 ,FVID与微驱动

    最近因为在做视频处理,所以和解码芯片打交道很多,根据DM642的例程总了一些应该配置的东西. 注:以下的配置均是指AV信号输入,PAL制式输出的条件 (一)关于SAA7115(基于TI的驱动) 结构体 ...

  9. Eureka Instance实例信息配置

    Eureka包含四个部分的配置 instance:当前Eureka Instance实例信息配置 client:Eureka Client客户端特性配置 server:Eureka Server注册中 ...

  10. JasperReport导出报表8

    我们已经看到在前面的章节中,如何打印和查看的JasperReport生成的文档.在这里,我们将看到如何在其他格式,如PDF,HTML和XLS转换或导出这些报告. Facade类net.sf.jaspe ...