我整理的一份来自于线上的Nginx配置(Nginx.conf),希望对学习Nginx的有帮助


我整理了一份Nginx的配置文件说明,是真正经历过正式线上考验过。如果有优化的地方,也请朋友们指点一二,整理出一份比较全而实用的配置。

主要包含配置:负载均衡配置,页面重定向,转发,HTTPS和HTTP的配置, 缓存优化,错误页面配置等。


#user  nobody;
#工作进程,于CPU核数一致
worker_processes  2;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;

events {
    # 设置可连接数
    worker_connections  2048;
    #优化同一时刻只有一个请求而避免多个睡眠进程被唤醒的设置,on为防止被同时唤醒,默认为off,因此nginx刚安装完以后要进行适当的优化。
    accept_mutex on;
    #打开同时接受多个新网络连接请求的功能
    multi_accept on;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    #隐藏nginx的版本号
    server_tokens off;

    #日志格式
    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  60;

    # 启动内容压缩,有效降低网络流量
    gzip on;
    # 过短的内容压缩效果不佳,压缩过程还会浪费系统资源
    gzip_min_length 1000;
    # 可选值1~9,压缩级别越高压缩率越高,但对系统性能要求越高
    gzip_comp_level 4;
    # 压缩的内容类别
    gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;

     # 静态文件缓存
    open_file_cache max=65535 inactive=20s;
    open_file_cache_valid 30s;
    open_file_cache_min_uses 2;

    #server {
      #  listen       80;
       # server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

       # location / {
       #     root   html;
        #    index  index.html index.htm;
       # }

        #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;
        #}
  #  }

    # 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;
    #    }
    #}

    #负载均衡 使用ip_hash策略,集群部署
    upstream raysonblog.cn {
        server 123.45.678.901:8081 weight=10 max_fails=1 fail_timeout=10s;
        server 123.45.678.902:8089 weight=5 max_fails=1 fail_timeout=10s;
    }

    # HTTPS server
    server {
        listen       443 ssl;
        server_name  www.raysonblog.cn;

    # 开启 ssl
    ssl on;
    # 指定 ssl 证书路径
    ssl_certificate cert/www.raysonblog.cn_bundle.crt;
    # 指定私钥文件路径
    ssl_certificate_key cert/raysonblog.cn.key;

    ssl_session_timeout 5m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;

        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade; # 支持Websocket
        proxy_set_header Connection "upgrade"; # 支持Websocket

        proxy_set_header Host $host:$server_port;
        proxy_set_header  X-Forwarded-Server $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header  X-Forwarded-Proto $scheme; # 真实用户访问协议
        proxy_set_header REMOTE-HOST $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_max_temp_file_size 0;

        # 配置缓存
        client_max_body_size 10m;
        client_body_buffer_size 128k;
        proxy_connect_timeout 18000;
        proxy_send_timeout 18000;
        proxy_read_timeout 18000;
        proxy_buffer_size 4k;
        proxy_buffers 4 32k;
        proxy_busy_buffers_size 64k;
        proxy_temp_file_write_size 64k;

        # 处理/项目名a/a.jsp重定向到/项目名b/b.jsp
        location = /项目名a/a.jsp {
            rewrite . /项目名b/b.jsp permanent; # permanent 永久
        }

        location /项目名c { # 转发
            proxy_pass http://127.0.0.1:8080/项目名c;
        }  

        location /项目名d { #转发
            proxy_pass http://127.0.0.1:8080/项目名d;
        } 

        location /blog { # 负载均衡跟upstream 的配置一致
            proxy_pass http://raysonblog.cn/blog;
        }
    }

# HTTP Server
server {# 服务名及配置,一个服务下可以有多个location用来表示不同的反向代理
     listen       80; # 端口号
     server_name  www.raysonblog.cn; #主机名,默认是本主机  

    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";

    proxy_set_header Host $host:$server_port;
    proxy_set_header  X-Forwarded-Server $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header  X-Forwarded-Proto $scheme;        # 真实用户访问协议
    proxy_set_header REMOTE-HOST $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_max_temp_file_size 0;
    client_max_body_size 10m;
    client_body_buffer_size 128k;
    proxy_connect_timeout 18000;
    proxy_send_timeout 18000;
    proxy_read_timeout 18000;
    proxy_buffer_size 4k;
    proxy_buffers 4 32k;
    proxy_busy_buffers_size 64k;
    proxy_temp_file_write_size 64k;

    location = /MP_verify_1wqwq.txt {
        root weixin; #weixin是nginx目录下html文件里的weixin文件夹
    }

    # 处理/项目名a/a.jsp重定向到/项目名b/b.jsp
    location = /项目名a/a.jsp {
        rewrite . /项目名b/b.jsp permanent; # permanent 永久
    }

    location /项目名c { # 转发
        proxy_pass http://127.0.0.1:8080/项目名c;
    }  

    location /项目名d { #转发
        proxy_pass http://127.0.0.1:8080/项目名d;
    } 

    location /blog { # 负载均衡跟upstream 的配置一致
        proxy_pass http://raysonblog.cn/blog;
    }
}

}

后续也会继续完善此配置,大家在配置的时候,基本上可以满足应用了。。。
微信关注:“Java技术干货”,或扫下方二维码。即刻关注,不迷路。

原文地址:https://www.cnblogs.com/werewolfBoy/p/11066021.html

时间: 2024-10-12 01:22:41

我整理的一份来自于线上的Nginx配置(Nginx.conf),希望对学习Nginx的有帮助的相关文章

Nginx、Tomcat线上环境优化配置

 Nginx.Tomcat线上环境优化配置 Nginx优化: Nginx安全方面的优化: 1. nginx安全优化,在nginx配置文件http标签段内添加"server_tokens  off"即可隐藏访问或者报错时提示web版本号信息. 2. server_tokens参数可以在http,server,location的位置添加 3. 还可以修改nginx的3个源码文件 4. 如还需要安全优化更改端口.用户. nginx 性能优化: 对于nginx配置文件中对优化比较有作用的一般为

线上系统/tmp 目录不断增长分析与总结

1.问题描述 系统配置为单核4G, web 工程配置堆2G,  /tmp目录 二进制文件不断增加,平均一天增加20G, 手动清理/tmp目录,重启系统,问题依旧. 2.分析 /tmp 目录存放系统运行时产生的临时文件.在Redhat-like系统上,会定期清理/tmp目录下10天未访问的文件.这个机制保证了,linux不会像windows那样在较长时间运行后变得臃肿不堪. 清理脚本位于/etc/cron.daily/tmpwatch,内容如下, #! /bin/sh flags=-umc /us

关于线上优化服务器视频笔记1-----快速部署线上服务器

线上linux服务器优化经验 2.线上服务器网络安全配置与系统登录安全配置 2.1.授权用户登录与sudo的设定 /etc/sudoers 文件 <user list> <host list> = <operator list> <tag list> <command list> 常见配置: Mbb ALL=(ALL) NOPASSWD:ALL 2.2.ssh登陆登陆经验 备份sshd配置文件 Cp /etc/ssh/sshd_config /e

性能测试之线上引流测试--让性能测试更真实更丰富

为什么要做引流测试 目前为止大部分的测试是在测试环境下,通过模拟用户的行为来对系统进行验证,包括功能以及性能.在这个过程中,你可能会遇到以下问题: 用户访问行为比较复杂,模拟很难和用户行为一致,模拟不够真实; 线下模拟场景有限,会出现业务覆盖不全的情况.引流测试就是为了解决以上问题,通过把线上的真实流量复制到线下环境,解决测试环境模拟不够真实,或覆盖不够全面的问题. 引流的做法 目前不少公司对引流测试进行了实践,主要有以下4种引流方式: 以上几种办法各有利弊,有的是需要自己开发相应的工具来支持.

Node.js项目的线上服务器部署与发布

课程目录:第1章 课程预热对整个部署思路进行全流程介绍,通过 5 个不同类型项目,来演示从本地的仓库到最终线上稳定运行的整个项目部署发布流程,来帮助始终编程在一线的前端或者后端工程师,甚至是有 Coding 能力的产品经理,从操作流程和架构形态上,掌握从零开始的项目上线环节,掌握这关键一步,跨过去前端到后端,本地到线上,开发到生产...第2章 待部署的 5 个本地 Nodejs 项目分别介绍五个技术架构和产品形态的项目背景,一个 Nodejs 静态网站,普通的带数据库电影网站,手机 App 场景

线上mysql内存持续增长直至内存溢出被killed分析

来新公司前,领导就说了,线上生产环境Mysql库经常会发生日间内存爆掉被killed的情况,结果来到这第一天,第一件事就是要根据线上服务器配置优化配置,同时必须找出现在mysql内存持续增加爆掉的原因,虽然我主业已经不是数据库更不是dba了. 这个业务上基本山算是OLTP,盘中都是很简单的SQL,所以性能上虽然有些SQL有些慢,但看过slow-log和performance_schema,可以忽略不计. 初步了解,应用是java开发的,但是应用端没有出现过OOM的情况,也不见卡死或者越来越慢的情

FPM打包工具制作线上nginx的RPM包

一.安装FPM打包工具 1.FPM是ruby的模块,先安装FPM依赖的包 [[email protected] ~]#  yum -y install ruby rubygems ruby-devel rpm-build 2.因国内网络环境,访问http://rubygems.org/站点时不稳定,所以增加国内toabao提供的一个镜像站点,把原来的站点移除 [[email protected] ~]#  gem sources -a https://ruby.taobao.org/ [[ema

Node.js线上服务器部署与发布

第1章 课程预热对整个部署思路进行全流程介绍,通过 5 个不同类型项目,来演示从本地的仓库到最终线上稳定运行的整个项目部署发布流程,来帮助始终编程在一线的前端或者后端工程师,甚至是有 Coding 能力的产品经理,从操作流程和架构形态上,掌握从零开始的项目上线环节,掌握这关键一步,跨过去前端到后端,本地到线上,开发到生产...1-1 为什么是全栈最后一公里1-2 搭建线上生产环境需要做什么 第2章 待部署的 5 个本地 Nodejs 项目分别介绍五个技术架构和产品形态的项目背景,一个 Nodej

Docker + node(koa) + nginx + mysql 线上环境部署

在上一篇 Docker + node(koa) + nginx + mysql 开发环境搭建,我们进行了本地开发环境搭建 现在我们就来开始线上环境部署 如果本地环境搭建没有什么问题,那么线上部署的配置也就很简单了 我所使用的环境,Linux Mint,命令有不同可以适当更改 目录结构 - compose 新建,线上环境配置 - data - conf - node_modules - static - docker-compose.yml - docker-compose-prod.yml 新建