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. mysql列属性操作(转载)

    1.mysql中修改字段长度: ALTER TABLE tb_article MODIFY COLUMN NAME VARCHAR(50); 这里的tb_article为表名,NAME为字段名,50为 ...

  2. SpringCloud学习笔记(三):Rest微服务构建案例工程模块

    需要具备的知识 1 springmvc+mybatis+mysql 2 Consumer消费者(Client)通过REST调用Provider提供者(Server)提供的服务 3 Maven的分包分模 ...

  3. Python GUI文本编辑器

    使用Python编写一个简单的文本编辑器,需要展示一个用户界面,功能包括打开.保存文本文件. 使用tkinter库来编写GUI. #简单GUI文本编辑器 from tkinter import * f ...

  4. wpf关闭窗口弹出是否确认关闭的提示

    if (MessageBox.Show("是否退出系统?", "退出系统?", MessageBoxButton.OKCancel, MessageBoxIma ...

  5. HTML5定位功能,实现在百度地图上定位

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. 2019-10-31-C#-dotnet-获取整个局域网的-ip-地址

    title author date CreateTime categories C# dotnet 获取整个局域网的 ip 地址 lindexi 2019-10-31 08:57:55 +0800 2 ...

  7. 使用传统javaweb进行文件上传

    使用传统文件上传方式 1.配置依赖 <properties> <project.build.sourceEncoding>UTF-8</project.build.sou ...

  8. BZOJ 3236 AHOI 2013 作业 莫队+树状数组

    BZOJ 3236 AHOI 2013 作业 内存限制:512 MiB 时间限制:10000 ms 标准输入输出     题目类型:传统 评测方式:文本比较 题目大意: 此时己是凌晨两点,刚刚做了Co ...

  9. IOS开发之基础oc语法

    类 1.类的定义: 类=属性+方法: -属性代表类的特征 -方法是类能对变化做出的反应 类定义的格式:类的声明和类的实现组成 -接口(类的声明):@interface 类名:基类的名字 .类名首字母要 ...

  10. 苹果系统 IOS 12 的H5 BUG :键盘把页面顶上去了,底下留有一块空白区域

    苹果以往的系统是没问题的,一般情况下,点击input唤起键盘后是会自动显示到输入框的地方,然后收起键盘页面就会恢复到底部. 但是如果苹果是已经更新到最新的IOS12的话就会发生一个BUG ,就是键盘唤 ...