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. centos7.2安装apache比较简单,直接上代码

    centos7.2安装apache比较简单,直接上代码 1.安装 yum install httpd    2.启动apache systemctl start httpd.service    3. ...

  2. 菜鸟nginx源码剖析数据结构篇(十) 自旋锁ngx_spinlock[转]

    菜鸟nginx源码剖析数据结构篇(十) 自旋锁ngx_spinlock Author:Echo Chen(陈斌) Email:chenb19870707@gmail.com Blog:Blog.csd ...

  3. Windows操作系统下创建进程的过程

    进程(Process)是具有一定独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的一个独立单位.程序只是一组指令的有序集合,它本身没有任何运行的含义,只是一个静态实体.而进程则 ...

  4. VS2010-MFC(MFC消息映射机制概述)

    转自:http://www.jizhuomi.com/software/147.html 前面已经说过,Windows应用程序是消息驱动的.在MFC软件开发中,界面操作或者线程之间通信都会经常用到消息 ...

  5. JDK源码阅读--StringBuffer

    public final class StringBuffer extends AbstractStringBuilder implements java.io.Serializable, CharS ...

  6. Java+微信支付(下预购单+回调+退款+查询账单)

    前言: 现在的APP的离不开微信支付, 现在项目里接入微信支付 , 微信支付的官方文档是:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chap ...

  7. ps命令详解-转

    名称:ps使用权限:所有使用者使用方式:ps [options] [--help]说明:显示瞬间行程 (process) 的动态参数:ps的参数非常多, 在此仅列出几个常用的参数并大略介绍含义-A   ...

  8. WPF+MVVM+EF示例1

    实现了那些功能,先看看效果图: 项目工程目录: 接下来开始具体的步骤: 第一步:在VS中新建工程 第二步:使用NuGet 安装EntityFramework 第三步:使用NuGet 安装EntityF ...

  9. mysql出错的代码解析及解答

    1005:创建表失败 1006:创建数据库失败 1007:数据库已存在,创建数据库失败 1008:数据库不存在,删除数据库失败 1009:不能删除数据库文件导致删除数据库失败 1010:不能删除数据目 ...

  10. 由于没有公钥,无法验证下列签名 ppa

    出现以上错误提示时,只要把后八位拷贝一下来,并在[终端]里输入以下命令并加上这八位数字回车即可! sudo apt-key adv --recv-keys --keyserver keyserver. ...