学习nginx,就要先了解什么是nginx,为什么使用nginx,最后才是了解怎么使用nginx     —— 哲氏沃硕德

nginx简介

  nginx是一个高性能的HTTP和反向代理Web服务器,还支持正向代理、透明代理、负载均衡、HTTP缓存等功能。nginx始于2004年10月4日,使用C语言编写,2013年4月24日,nginx发布了v1.4.0稳定版,建议大家使用的版本高于此版本。
  免费开源的nginx能够在众多同类产品中脱颖而出,是因为它具备低内存、高并发的优势,且配置简单,支持URL重写、GZIP,内置健康检查,能自动检测集群服务器状态,跳过宕机服务器。

nginx安装

一、Linux中安装nginx
1.安装编译工具和库文件
  1. yum -y install make pcre pcre-devel zlib zlib-devel gcc-c++ libtool openssl openssl-devel
2.下载nginx并安装
  1. cd /usr/local/src/
  2. # 下载特定版本 nginx 压缩包,这里以v1.18.0为例
  3. wget http://nginx.org/download/nginx-1.18.0.tar.gz
  4. # 解压
  5. tar -zxvf nginx-1.18.0.tar.gz
  6. # 进入到 nginx-1.18.0 目录下
  7. cd nginx-1.18.0/
  8. # 生成 Makefile
  9. ./configure
  10. # 编译并且安装(默认输出到/usr/local/nginx,可在configure中看到)
  11. make && make install
  • 如果想要编译输出到指定目录
  1. # 设置编译输出目录为 /home/jjj/nginx
  2. ./configure --prefix=/home/jjj/nginx
  3. # 编译并且安装(输出到/home/jjj/nginx)
  4. make && make install
3.防火墙开放端口号
  • 开放端口号外网才可访问
  • 练习期间,推荐将防火墙关闭,避免因其导致无法访问而卡住:systemctl stop firewalld.service
  1. # 开启 80
  2. firewall-cmd --zone=public --add-port=80/tcp --permanent
  3. # 重启防火墙
  4. firewall-cmd --reload
  5. # 查询端口号80是否开启
  6. firewall-cmd --query-port=80/tcp
  7. # 查询哪些端口已开启
  8. firewall-cmd --list-port
4.自己动手测试一下能否访问吧
  • 启动nginx(命令要在nginx安装目录的sbin目录下执行)
  • 在浏览器中输入nginx所在的主机ip
  1. /usr/local/nginx/sbin/nginx # 启动nginx
  2. /usr/local/nginx/sbin/nginx -s reload # 重新加载nginx配置
  3. /usr/local/nginx/sbin/nginx -s stop # 快速关闭nginx(先查出nginx进行id,然后使用kill命令强制杀死进程),可能不保存相关信息(不推荐)
  4. /usr/local/nginx/sbin/nginx -s quit # 平稳关闭nginx,保存相关信息(推荐)
  5. /usr/local/nginx/sbin/nginx -s reopen # 重新打开日志文件
  6. /usr/local/nginx/sbin/nginx -s <filename> # 为 nginx 指定一个配置文件
  7. /usr/local/nginx/sbin/nginx -t # 不运行,仅测试配置文件正确性
  8. /usr/local/nginx/sbin/nginx -v # 显示nginx版本
  9. /usr/local/nginx/sbin/nginx -V # 显示 nginx 的版本,编译器版本和配置参数
  10. netstat -anput | grep nginx # 检测 nginx 运行状态(如无任何信息显示则是未运行)
4.配置开机启动

关机重启了你不会想自己动手再启动一遍nginx吧?

  • 新建 nginx.service 文件
  1. vim /usr/lib/systemd/system/nginx.service
  1. # 服务说明项
  2. [Unit]
  3. # 描述
  4. Description=nginx
  5. # 在哪些服务启动之后启动该服务,多个服务用空格隔开
  6. After=network.target
  7. # 在哪些服务启动之前启动该服务
  8. # Before=xxx
  9. # 弱依赖,如果xxx服务启动失败或停止运行,不影响该服务
  10. # Wants=xxx
  11. # 强依赖,如果xxx服务启动失败或停止运行,该服务也必须退出
  12. # Requires=xxx
  13. # 运行参数设置
  14. [Service]
  15. # 启动类型
  16. # simple(默认值):ExecStart字段启动的进程为主进程
  17. # forking:ExecStart字段将以fork()方式启动,此时父进程将会退出,子进程将成为主进程
  18. # oneshot:类似于simple,但只执行一次,Systemd 会等它执行完,才启动其他服务
  19. # dbus:类似于simple,但会等待 D-Bus 信号后启动
  20. # notify:类似于simple,启动结束后会发出通知信号,然后 Systemd 再启动其他服务
  21. # idle:类似于simple,但是要等到其他任务都执行完,才会启动该服务。一种使用场合是为让该服务的输出,不与其他服务的输出相混合
  22. Type=forking
  23. # Start命令
  24. ExecStart=/usr/local/nginx/sbin/nginx
  25. # Reload命令
  26. ExecReload=/usr/local/nginx/sbin/nginx -s reload
  27. # Stop命令
  28. ExecStop=/usr/local/nginx/sbin/nginx -s quit
  29. # 是否给服务分配独立的临时空间
  30. PrivateTmp=true
  31. # 配置开机启动方式
  32. [Install]
  33. # 该服务所在的 Target,Target的含义是服务组,表示一组服务
  34. # multi-user.target 默认被配置为开机启动
  35. WantedBy=multi-user.target
  • 纯净版(去除注释)
  1. [Unit]
  2. Description=nginx
  3. After=network.target
  4. [Service]
  5. Type=forking
  6. ExecStart=/usr/local/nginx/sbin/nginx
  7. ExecReload=/usr/local/nginx/sbin/nginx -s reload
  8. ExecStop=/usr/local/nginx/sbin/nginx -s quit
  9. PrivateTmp=true
  10. [Install]
  11. WantedBy=multi-user.target
  • 最后启动服务并重启机器进行测试
  1. systemctl enable nginx.service # 启用 nginx.service 开机启动
  2. reboot # 重启电脑
  3. ## 其他命令
  4. systemctl disable nginx.service # 禁止 nginx.service 开机启动
  5. systemctl stop nginx.service # 停止 nginx.service
  6. systemctl start nginx.service  # 启动 nginx.service
  7. systemctl restart nginx.service # 重启 nginx.service
  8. systemctl list-units --type=service # 查看所有已启动的服务
  • 检查 nginx.service 运行状况
  1. systemctl status nginx.service
  • 检查nginx运行状况
  1. netstat -anput | grep nginx
二、Docker中安装nginx
下载镜像
  1. # 搜索镜像
  2. docker search nginx
  3. # 拉取镜像
  4. docker pull nginx
创建并启动容器
  • -d:后台运行
  1. docker run -d -it -p 8080:80 --name nginx8080 nginx
访问nginx
  1. curl <ip>:8080

微服务分布式部署前期准备

为了方便修改nginx配置,需要将容器内的nginx相关文件拷贝到主机中,并将其映射到容器中去,这样,修改起来就方便多了

  • 拷贝nginx文件到本地
  1. docker cp nginx8080:/etc/nginx ~/nginx
  • 上面步骤创建的nginx8080已经没用了,删除即可
  1. docker stop nginx8080
  2. docker rm nginx8080
创建挂载本地目录的nginx8080容器
  • 挂载:即主机上指定目录与容器内指定目录文件共享
  • -v ~/nginx:/etc/nginx:将本地~/nginx文件映射到容器/etc/nginx,方便修改配置
  • -v ~/nginx/log:/var/log/nginx:将本地~/nginx/log映射到容器/var/log/nginx,方便查看日志
  • 我的环境:apidemo1、apidemo1、nginx8080都在同一docker中
  • 方法一:使用 link 建立容器间通信
    • --link=apidemo1:demo1:实现nginx8080容器到apidemo1容器的单向通信,并为apidemo1起别名为demo1,nginx8080内部可直接使用demo1访问apidemo1
    • --link=apidemo2:demo2:实现nginx8080容器到apidemo2容器的单向通信,并为apidemo2起别名为demo2,nginx8080内部可直接使用demo2访问apidemo2
    1. # apidemo1与apidemo2是同一应用的不同分发
    2. docker run -d -it -p 8080:80 --name nginx8080 -v ~/nginx:/etc/nginx -v ~/nginx/log:/var/log/nginx --link=apidemo1:demo1 --link=apidemo2:demo2 nginx
    • 修改nginx.conf
    1. vim ~/nginx/nginx.conf
    2. server {
    3. listen 80;
    4. server_name localhost;
    5. location / {
    6. root /usr/share/nginx/html;
    7. index index.html index.htm;
    8. }
    9. location /api/ {
    10. proxy_pass http://apiserver/api/;
    11. }
    12. }
    13. upstream apiserver {
    14. server demo1 weight=1;
    15. server demo2 weight=1;
    16. }
  • 方法二:使用 docker bridge 建立容器间通信
    • docker network ls:查看docker网络信息,其中,我们创建的容器默认使用bridge(桥接)
    • docker network inspect bridge:查看bridge的详细信息以及哪些容器使用了该网络类型,我这边的ip地址是
      • apidemo1:172.17.0.2
      • apidemo2:172.17.0.3
    1. docker run -d -it -p 8080:80 --name nginx8080 -v ~/nginx:/etc/nginx -v ~/nginx/log:/var/log/nginx nginx
    • 修改nginx.conf
    1. vim ~/nginx/nginx.conf
    2. server {
    3. listen 80;
    4. server_name localhost;
    5. location / {
    6. root /usr/share/nginx/html;
    7. index index.html index.htm;
    8. }
    9. location /api/ {
    10. proxy_pass http://apiserver/api/;
    11. }
    12. }
    13. upstream apiserver {
    14. server 172.17.0.2 weight=1;
    15. server 172.17.0.3 weight=1;
    16. }
为了应用新nginx.conf,重启nginx8080
  1. docker restart nginx8080
测试
  1. // 这里的路径按照自己的来
  2. curl <ip>:8080/api/values
可能出现的问题
  1. Http staus code——502:

    解决:查看日志可以看到“113: No route to Host”,尝试关闭docker所在linux机器的防火墙,发现可以访问了,可以确定是防火墙的问题。但是把防火墙关闭太不安全了,所以我们选择打开防火墙,然后执行以下命令
  1. # 信任 docker0 服务连接
  2. nmcli connection modify docker0 connection.zone trusted
  3. # 停止 NetworkManager 服务(该服务用语监测网络、自动连接网络)
  4. systemctl stop NetworkManager.service
  5. # 将docker0网络接口设置为内部区域(永久)
  6. firewall-cmd --permanent --zone=trusted --change-interface=docker0
  7. # 启动 NetworkManager 服务
  8. systemctl start NetworkManager.service
  9. # 信任 docker0 服务连接
  10. nmcli connection modify docker0 connection.zone trusted
  11. # 重启 docker
  12. systemctl restart docker.service
三、文件目录
  • *_temp:共5个temp结尾的目录,用于存放nginx运行时产生的临时文件
  • conf:存放配置文件的目录,包含主配置文件nginx.conf
  • html:存放了nginx的错误页面和欢迎页面
  • logs:存放了访问日志和错误日志
  • sbin:存放了nginx的二进制命令,常用于nginx服务的启动、停止等管理工作

nginx常用功能和配置

一、限流
三种方式
  • limit_conn_zone(限制连接数,针对客户端,即单一ip限流)
  • limit_req_zone(限制请求数,针对客户端,即单一ip限流)
  • ngx_http_unpstream_module(推荐,针对后台,如:有两台服务器,服务器A最大可并发处理10W条请求,服务器B最大可并发处理5W条请求,这样当12W请求按照负载均衡规则应当被分配给服务器A时,nginx为了防止A挂掉,所以将另外的2W分配给B)
压力测试工具——Ab
  • 安装
  1. yum install httpd-tools -y
  • 测试
  1. // 10个用户,向 http://www.test.com/ 并发发送1000条请求(总请求数=1000)
  2. ab -c 10 -n 1000 http://www.test.com/
  • 返回值

    • Document Path:测试的页面路径
    • Document Length:页面大小(byte)
    • Concurrency Level:并发数量,即并发用户数
    • Time taken for tests:测试耗费时长
    • Complete requests:成功的请求数量
    • Failed requests:请求失败的数量
    • Write errors:错误数量
    • Requests per second:每秒钟的请求数量、吞吐率
    • Timer per request:每次请求所需时间、响应时间
limit_conn_zone
  1. http {
  2. # 将请求客户端的IP($binary_remote_addr)存放到perip区域,区域大小为10M,一个IP占用32Byte(32位系统)或64Byte(64位系统)左右
  3. # perip是区域的名字,可自定义
  4. limit_conn_zone $binary_remote_addr zone=perip:10m;
  5. server {
  6. # 每个IP最大并发1条连接
  7. # 该语句还可直接放置到http模块下,这样下属的server都应用该配置
  8. # 该语句还可放置到server中的location模块中,这样仅指定的location应用该配置
  9. limit_conn perip 1;
  10. # 每个连接限速300 k/s
  11. limit_rate 300k;
  12. }
  13. }
limit_req_zone
  1. http {
  2. # 将请求客户端的IP存放到perip区域,区域大小为10M,并限制同一IP地址的请求每秒钟只处理一次
  3. limit_req_zone $binary_remote_addr zone=perip:10m rate=1r/s;
  4. server {
  5. # 当有大量请求爆发时,可以缓存2条请求
  6. # 设置了nodelay,缓存队列的请求会立即处理,若请求数 > rate+burst 时,立即返回503;如果没设置,则会按照rate排队等待处理
  7. # 该语句还可直接放置到http模块下,这样下属的server都应用该配置
  8. # 该语句还可放置到server中的location模块中,这样仅指定的location应用该配置
  9. limit_req zone=perip burst=2 nodelay;
  10. }
  11. }
  • 测试:ab -c 1 -n 3 http://localhost/

    • 3个请求全部成功,因为正在处理的请求数1加上缓存数2,没超过限制
  1. Server Software: nginx/1.18.0
  2. Server Hostname: 192.168.159.128
  3. Server Port: 80
  4. Document Path: /
  5. Document Length: 612 bytes
  6. Concurrency Level: 1
  7. Time taken for tests: 0.001 seconds
  8. Complete requests: 3
  9. Failed requests: 0
  10. Total transferred: 2535 bytes
  11. HTML transferred: 1836 bytes
  12. Requests per second: 2439.02 [#/sec] (mean)
  13. Time per request: 0.410 [ms] (mean)
  14. Time per request: 0.410 [ms] (mean, across all concurrent requests)
  15. Transfer rate: 2012.67 [Kbytes/sec] received
  • 测试:ab -c 3 -n 4 http://localhost/

    • 3个请求成功,1个请求失败,因为正在处理的请求数1加上缓存数2,另外1条请求失败
  1. erver Software: nginx/1.18.0
  2. Server Hostname: 192.168.159.128
  3. Server Port: 80
  4. Document Path: /
  5. Document Length: 612 bytes
  6. Concurrency Level: 1
  7. Time taken for tests: 0.002 seconds
  8. Complete requests: 4
  9. Failed requests: 1
  10. (Connect: 0, Receive: 0, Length: 1, Exceptions: 0)
  11. Non-2xx responses: 1
  12. Total transferred: 3223 bytes
  13. HTML transferred: 2330 bytes
  14. Requests per second: 2504.70 [#/sec] (mean)
  15. Time per request: 0.399 [ms] (mean)
  16. Time per request: 0.399 [ms] (mean, across all concurrent requests)
  17. Transfer rate: 1970.86 [Kbytes/sec] received
ngx_http_upstream_module
  1. upstream MyName {
  2. server 192.168.0.1:8080 weight=1 max_conns=10;
  3. server 192.168.0.2:8080 weight=1 max_conns=10;
  4. }
二、安全配置
版本安全
  • 隐藏HTTP Response消息头Server中的版本号

    • 隐藏前:Server: nginx/1.18.0
    • 隐藏后:Server: nginx
  1. http {
  2. server_tokens off;
  3. }
IP安全
  • 白名单配置(适用于授权IP较少的情况),可配置在http、server、location中
  1. location / {
  2. allow 192.168.1.1;
  3. deny all;
  4. }
  • 黑名单配置(适用于授权IP较多的情况),可配置在http、server、location中
  1. location / {
  2. deny 192.168.1.1;
  3. allow all;
  4. }
文件安全
  1. location /logs {
  2. autoindex on;
  3. root/opt/nginx/;
  4. }
  5. location ^logs~*\.(log|txt)$ {
  6. add_header Content-Type text/plain;
  7. root/opt/nginx/;
  8. }
连接安全
  • https(我就不多介绍了)
三、进程数、并发数、系统优化
配置nginx.conf,增加并发量
  1. # 与CPU逻辑核心数一致
  2. worker_processes 12;
  3. events {
  4. # 单个worker最大并发连接数
  5. worker_connection 65535;
  6. }
调整内核参数
  • 查看所有的属性值
  1. ulimit -a
  • 临时设置硬限制(重启后失效)
  1. ulimit -Hn 100000
  • 临时设置软限制(重启后失效)
  1. ulimit -Sn 100000
  • 持久化设置(重启后仍生效)
  1. vim /etc/security/limits.conf
  2. # 接下来是文件中需要配置的内容
  3. * soft nofile 100000
  4. * hard nofile 100000
  5. # 用户/组 软/硬限制 需要限制的项目 限制的值
四、GZIP
  • 作用:启用gzip后,服务器将响应报文进行压缩,有效地节约了带宽,提高了响应至客户端的速度。当然,压缩会消耗nginx所在电脑的cpu
  • 配置范围:http、server、location
  1. http {
  2. # 启用gzip
  3. gzip on;
  4. # 允许压缩的最小字节数(即如果response header中的content-length小于该值,就不压缩)
  5. gzip_min_length 2k;
  6. # 按照原数据大小以16k为单位的4倍申请内存用作压缩缓存
  7. gzip_buffers 4 16k;
  8. # 压缩级别,级别越大,压缩率越高,占用CPU时间更长
  9. gzip_comp_level 5;
  10. # 需要被压缩的响应类型,默认值是text/html
  11. gzip_types text/plain application/x-javascript text/css application/xml;
  12. # 配置最低版本的http压缩协议(即1.0时,1.0和1.1都会启用压缩;1.1时,仅1.1时才会启用压缩)
  13. gzip_http_version 1.0;
  14. # IE6及以下禁用压缩
  15. gzip_disable "MSIE [1-6]\.";
  16. }
五、状态监控
  • 配置访问地址
  1. location /nginxstatus {
  2. stub_status on;
  3. // 禁止将监控信息写入访问日志
  4. access_log off;
  5. }
  • 安装插件并重启
  1. cd /usr/local/src/nginx-1.18.0
  2. # 如果不是使用的默认路径,使用 --prefix 指定
  3. ./configure --with-http_stub_status_module
  4. make && make install
  5. /usr/local/nginx/sbin/nginx -s quit
  6. /usr/local/nginx/sbin/nginx
  • 访问地址,状态参数如下

    • Active connections:活跃的连接数量
    • server accepts handled requests:处理的总连接数 创建的握手数 处理的总请求数
    • reading:读取客户端的Header信息的次数。这个操作仅读取头部信息,完成后立即进入writing状态
    • writing:响应数据传到客户端的Header信息次数。这个操作不仅读取头部,还要等待服务响应
    • waiting:开启keep-alive后等候下一次请求指令的驻留连接
六、负载均衡
轮询
  1. upstream myserver {
  2. # 默认所有服务器权重为 1
  3. server 192.168.250.220:8080;
  4. server 192.168.250.221:8080;
  5. server 192.168.250.222:8080;
  6. }
加权轮询
  • 性能更好的服务器权重应更高
  1. upstream myserver {
  2. server 192.168.250.220:8080 weight=3;
  3. server 192.168.250.221:8080; # default weight=1
  4. server 192.168.250.222:8080; # default weight=1
  5. }
最少连接
  1. upstream myserver {
  2. least_conn;
  3. # with default weight for all (weight=1)
  4. server 192.168.250.220:8080;
  5. server 192.168.250.221:8080;
  6. server 192.168.250.222:8080;
  7. }
加权最少连接
  • 性能更好的服务器权重应更高
  1. upstream myserver {
  2. least_conn;
  3. server 192.168.250.220:8080 weight=3;
  4. server 192.168.250.221:8080; # default weight=1
  5. server 192.168.250.222:8080; # default weight=1
  6. }
IP Hash
  • 算法:根据客户端ip进行Hash得到一个数值,然后使用该数值对服务器个数取模,得到的结果就是映射的服务器序号
  • (在服务器个数不变的情况下)可保证同一ip地址的请求始终映射到同一台服务器,解决了session共享问题
  1. upstream myserver {
  2. ip_hash;
  3. # with default weight for all (weight=1)
  4. server 192.168.250.220:8080;
  5. server 192.168.250.221:8080;
  6. server 192.168.250.222:8080;
  7. }
uri Hash
  • (在服务器个数不变的情况下)可保证同一uri始终映射到同一台服务器
  • nginx在1.7.2之后支持uri_hash
  1. upstream myserver {
  2. hash $request_uri;
  3. # with default weight for all (weight=1)
  4. server 192.168.250.220:8080;
  5. server 192.168.250.221:8080;
  6. server 192.168.250.222:8080;
  7. }
七、access日志切割
  • 新建Shell脚本
  1. # 脚本文件路径随意
  2. vim /usr/local/nginx/nginx_log.sh
  • 将以下内容添加到脚本中
  1. #! /bin/bash
  2. # 设置日志文件存放目录(nginx安装目录为/usr/local/nginx)
  3. LOG_HOME="/usr/local/nginx/logs"
  4. # 备份Log名称
  5. LOG_PATH_BAK="$(date -d yesterday +%Y%m%d%H%M)".access.log
  6. # 重命名日志文件
  7. mv ${LOG_HOME}/access.log ${LOG_HOME}/${LOG_PATH_BAK}.log
  8. # 向nginx主进程发信号重新打开日志
  9. kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
  • 创建crontab定时作业
  1. crontab -e
  1. # 以每分钟切割一次为例
  2. */1 * * * * sh /usr/local/nginx/nginx_log.sh
  3. # 以每天切割一次为例
  4. 0 0 0 1/1 * ? sh /usr/local/nginx/nginx_log.sh
八、动静分离
  • 概念:将动态请求和静态请求分开
  • 实现方式:
    • (推荐)将静态文件存放在专门的服务器上,使用单独的域名
    • 另一种是将动态和静态文件放在一起,使用nginx区分
以实现方式1为例
  • 前提:将静态文件存放在代理服务器中
  • 在ngnix中创建文件目录(如/usr/local/nginx/static),将所有静态文件发布到该目录中
  • 在nginx.conf http server 中配置动静分离
  1. server {
  2. location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css)$
  3. {
  4. root /usr/local/nginx/static;
  5. # 缓存30天
  6. expires 30d;
  7. }
  8. }
  • 在实际的后台服务器中发布的程序中,使用静态文件时,路径指向设置为静态文件服务器(这里是代理服务器)

nginx.conf基础配置项

  1. # 指定运行nginx的用户名
  2. #user nobody;
  3. # 工作线程数,通常同cpu逻辑核心数一致
  4. worker_processes 1;
  5. # 错误日志路径 最小级别 [ debug | info | notice | warn | error | crit ]
  6. #error_log logs/error.log;
  7. #error_log logs/error.log notice;
  8. #error_log logs/error.log info;
  9. # 指定进程的pid记录文件,记录当前运行的nginx的pid
  10. #pid logs/nginx.pid;
  11. # 网络连接模块
  12. events {
  13. # 一个工作线程支持的最大并发连接数
  14. worker_connections 1024;
  15. # keepalive超时时间,单位:秒
  16. keepalive_timeout 60;
  17. }
  18. # 设定http服务器,利用它的反向代理功能提供负载均衡支持
  19. http {
  20. # 设定支持的 mime 类型
  21. include mime.types;
  22. # 默认 mime 类型
  23. default_type application/octet-stream;
  24. # 设定日志格式,格式名为main
  25. ## $remote_addr:客户端的ip地址(若使用代理服务器,则是代理服务器的ip)
  26. ## $remote_user:客户端的用户名(一般为“-”)
  27. ## $time_local:访问时间和时区
  28. ## $request:请求的url和请求方法
  29. ## $status:响应HTTP状态码
  30. ## $body_bytes_sent:响应body中的字节数
  31. ## $http_referer:客户端是从哪个url来请求的
  32. ## $http_user_agent:客户端用户使用的代理(一般为浏览器)
  33. ## $http_x_forwarded_for:客户端的ip地址(通过代理服务器记录客户端的ip地址)
  34. #log_format main '$remote_addr - $remote_user [$time_local] "$request" '
  35. # '$status $body_bytes_sent "$http_referer" '
  36. # '"$http_user_agent" "$http_x_forwarded_for"';
  37. # 访问日志文件路径及日志格式
  38. #access_log logs/access.log main;
  39. # 指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,对于普通应用,必须设为 on,
  40. # 如果用来进行下载等应用磁盘IO重负载应用,可设置为 off,以平衡磁盘与网络I/O处理速度,降低系统的uptime
  41. sendfile on;
  42. #tcp_nopush on;
  43. # keepalive 超时时长,单位:秒
  44. #keepalive_timeout 0;
  45. keepalive_timeout 65;
  46. # 打开 gzip
  47. #gzip on;
  48. # 以上为 nginx 的全局设置,应用于所有 Web 应用
  49. # 一个Web应用对应一个 server,内部配置仅针对该应用,优先级比全局的高
  50. server {
  51. // 端口号
  52. listen 80;
  53. // 域名,比如 www.test.com
  54. server_name localhost;
  55. # 编码格式
  56. #charset koi8-r;
  57. # 访问日志文件路径
  58. #access_log logs/host.access.log main;
  59. # 一般路由导航到:
  60. location / {
  61. # 根目录为html
  62. root html;
  63. # 默认页为 index.html,如果没有则是 index.htm
  64. index index.html index.htm;
  65. }
  66. # 404时的展示页面
  67. #error_page 404 /404.html;
  68. # 50X时的展示页面
  69. # redirect server error pages to the static page /50x.html
  70. #
  71. error_page 500 502 503 504 /50x.html;
  72. location = /50x.html {
  73. root html;
  74. }
  75. # proxy the PHP scripts to Apache listening on 127.0.0.1:80
  76. #
  77. #location ~ \.php$ {
  78. # proxy_pass http://127.0.0.1;
  79. #}
  80. # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
  81. #
  82. #location ~ \.php$ {
  83. # root html;
  84. # fastcgi_pass 127.0.0.1:9000;
  85. # fastcgi_index index.php;
  86. # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
  87. # include fastcgi_params;
  88. #}
  89. # 禁止访问 .htxxx 的文件
  90. # deny access to .htaccess files, if Apache's document root
  91. # concurs with nginx's one
  92. #
  93. #location ~ /\.ht {
  94. # deny all;
  95. #}
  96. }
  97. # another virtual host using mix of IP-, name-, and port-based configuration
  98. #
  99. #server {
  100. # listen 8000;
  101. # listen somename:8080;
  102. # server_name somename alias another.alias;
  103. # location / {
  104. # root html;
  105. # index index.html index.htm;
  106. # }
  107. #}
  108. ############## HTTPS demo beign ##############
  109. # HTTPS server
  110. #
  111. #server {
  112. # listen 443 ssl;
  113. # server_name localhost;
  114. # ssl 证书文件位置
  115. # ssl_certificate cert.pem;
  116. # ssl 证书key的位置
  117. # ssl_certificate_key cert.key;
  118. # ssl_session_cache shared:SSL:1m;
  119. # ssl_session_timeout 5m;
  120. # 数字签名 MD5
  121. # ssl_ciphers HIGH:!aNULL:!MD5;
  122. # ssl_prefer_server_ciphers on;
  123. # location / {
  124. # root html;
  125. # index index.html index.htm;
  126. # }
  127. #}
  128. ############### HTTPS demo end ###############
  129. ############ 反向代理 demo begin #############
  130. # 设定实际的服务器列表(权重默认都是1)
  131. #upstream myserver{
  132. # server 192.168.0.1:8089 weight=7;
  133. # server 192.168.0.2:8089 weight=3;
  134. #}
  135. #server {
  136. # listen 80;
  137. # server_name localhost;
  138. #反向代理的路径(和upstream绑定),location 后面设置映射的路径
  139. # location / {
  140. # proxy_pass http://myserver;
  141. # }
  142. #}
  143. ############# 反向代理 demo end ##############
  144. }

一文带你了解nginx基础的更多相关文章

  1. 实战 | 一文带你读懂Nginx反向代理

    一个执着于技术的公众号 前言 在前面的章节中,我们已经学习了nginx基础知识: 给小白的 Nginx 10分钟入门指南 Nginx编译安装及常用命令 完全卸载nginx的详细步骤 Nginx 配置文 ...

  2. nginx 基础文档

    Nginx基础 1.  nginx安装 2.  nginx 编译参数详解 3.  nginx安装配置+清缓存模块安装 4.  nginx+PHP 5.5 5.  nginx配置虚拟主机 6.  ngi ...

  3. Istio是啥?一文带你彻底了解!

    原标题:Istio是啥?一文带你彻底了解! " 如果你比较关注新兴技术的话,那么很可能在不同的地方听说过 Istio,并且知道它和 Service Mesh 有着牵扯. 这篇文章可以作为了解 ...

  4. 一文带你了解elasticsearch

    一文带你了解elasticsearch cxf2102100人评论160人阅读2019-07-02 21:31:36   elasticsearch es基本概念 es术语介绍 文档Document ...

  5. 【转帖】Istio是啥?一文带你彻底了解!

    Istio是啥?一文带你彻底了解! http://www.sohu.com/a/270131876_463994 原始位置来源: https://cizixs.com 如果你比较关注新兴技术的话,那么 ...

  6. Nginx 基础入门

    目录 Nginx 基础入门 1.Nginx简介 1.1.相关名词解释 2.Nginx优势 3.Nginx部署 4.Nginx配置文件 5.Nginx模块 6.Nginx配置文件 6.1.Locatio ...

  7. 一文带你读懂什么是vxlan网络

    一个执着于技术的公众号 一.背景 随着云计算.虚拟化相关技术的发展,传统网络无法满足大规模.灵活性要求高的云数据中心的要求,于是便有了overlay网络的概念.overlay网络中被广泛应用的就是vx ...

  8. Nginx记录-Nginx基础(转载)

    1.Nginx常用功能 1.Http代理,反向代理:作为web服务器最常用的功能之一,尤其是反向代理. Nginx在做反向代理时,提供性能稳定,并且能够提供配置灵活的转发功能.Nginx可以根据不同的 ...

  9. 部署文档(centos7.x\nginx\mysql5.6\jdk1.8\ssl\jboot)

    部署文档(centos7.x\nginx\mysql5.6\jdk1.8\ssl\jboot) 1.基础环境********************************************** ...

随机推荐

  1. JAVA编程思想 Ch3.5题

    练习5:创建一个class类,包含连两个String字段 :name.says.在main方法中创建两个Dog方法 一个命名为spot 叫声为 Ruff,另一个命民为scruffy,叫声为:Wuff: ...

  2. Codeforce-Ozon Tech Challenge 2020-B. Kuroni and Simple Strings(贪心)

    B. Kuroni and Simple Strings time limit per test1 second memory limit per test256 megabytes inputsta ...

  3. 图论--传递闭包(Floyd模板)

    #include<iostream> #include<cstring> #include<cmath> using namespace std; int dp[1 ...

  4. 常用linux命令学习记录

    批量替换文件中字符串: sed -i "s/ITSApi/icallApi/g" `grep ITSApi -rl icallbiz` 解释: 将icallbiz目录文件中包涵的I ...

  5. spring学习笔记(四)我对spring中bean生命周期的理解

    我相信大部分同学对spring中bean的生命周期都不陌生,但是如果要详细的说出每一个步骤,可能能说出来的也不多,我之前也是这样,前几天调了一下spring的源码,看了一点书,突然一下明朗了,理解了s ...

  6. 设计模式之GOF23解释器模式

    解释器模式Interpreter -是一种不常用的设计模式 -用于描述如何构成一个简单的语言解释器,主要用于使用面向对象语言开发的编译器和解释器设计 -当我们需要开发一种新的语言时,可以考虑使用解释器 ...

  7. python 基础知识1

    一.编译型与解释性区别: 编译型:一次性将全部的代码编译成二进制文件.(如:C.C++) 优点:运行效率高 缺点:开发速度慢,不能跨平台. 解释型:当程序运行时,从上至下一行一行的解释成二进制.(如p ...

  8. 前端:参数传错了,spring-boot:那错误信息我给你显示的友好点儿

    之前两篇文章 Spring-boot自定义参数校验注解和如何在spring-boot中进行参数校验,我们介绍了,参数校验以及如何自定义参数校验注解,但是当传递参数出错时,只是把错误信息打印到了控制台, ...

  9. lodash入门

    简介 Lodash是一个著名的javascript原生库,不需要引入其他第三方依赖.是一个意在提高开发者效率,提高JS原生方法性能的JS库.简单的说就是,很多方法lodash已经帮你写好了,直接调用就 ...

  10. ESXI 6.5利用Centos7重置root密码

    ESXI6.5宿主机,很久没有登录,再次登录的时候,发现忘记root密码了 1.先将刻录一个CentOS7的启动光盘或U盘,并将服务器的启动项修改为光盘 2.保存BIOS重启后,选择Troublesh ...