快盘下载:好资源、好软件、快快下载吧!

快盘排行|快盘最新

当前位置:首页软件教程电脑软件教程 → Nginx-配置示例

Nginx-配置示例

时间:2022-10-13 10:56:27人气:作者:快盘下载我要评论

文章目录

  • nginx主配置文件调优
  • Nginx HTTP跳转HTTPS
  • Nginx代理PHP服务
  • Nginx作为代理服务器
  • Nginx作为负载均衡服务器
  • Nginx作为静态文件服务器
  • Nginx反向代理WebSocket服务
  • Nginx反向代理示例
  • Nginx 子路由部署 Recat 项目
  • Nginx 开启gzip压缩
  • Nginx 跨域问题解决
  • Nginx配置IP黑/白名单
  • Nginx配置SSL证书
  • Nginx配置动静分离
  • Nginx 隐性跳转;浏览器保留旧URL;

Nginx主配置文件调优

# 启动用户改为 root;避免权限问题报错。
user  root;
# 定义了 nginx 在为你的网站提供服务时;worker 进程的数量。工作进程一般设置为 CPU 的线程数;这里设置成 auto;nginx 会自动获取 CPU 线程数;并启用相对应的 worker 进程。
worker_processes  auto;
# 配置 nginx worker 进程最大打开文件数
worker_rlimit_nofile 65535;
# nginx 的错误日志路径;warn 表示只打印打印 warn 级别以上的日志。
error_log  /var/log/nginx/error.log warn;
# nginx 的 pid 文件路径
pid        /var/run/nginx.pid;
 
# 并发优化
events {
    # 设置了一个 worker 进程可以同时打开的链接数。如;现有4个 worker 进程;则当前 nginx 服务器的同时打开链接数为 4*1024=4096 个。需根据当前服务器的 open files 值设定;使用 ulimit -a 查看当前服务器的 open files 值。
    worker_connections  65535;
    # 让nginx收到一个新连接通知后接受尽可能多的连接。
    multi_accept   on;
}
 
http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
 
    # 定义一个 main 的日志格式
    log_format  main  ;$remote_addr - $remote_user [$time_local] ;$request; ;
                      ;$status $body_bytes_sent ;$http_referer; ;
                      ;;$http_user_agent; ;$http_x_forwarded_for;;;
 
    # http 服务的访问日志路径;日志格式为 main 定义的格式
    access_log  /var/log/nginx/access.log  main;
    # 指向 sendfile()函数。sendfile() 在磁盘和 TCP 端口;或者任意两个文件描述符;之间复制数据。
    sendfile    on;
    # 配置 nginx 在一个包中发送全部的头文件;而不是一个一个发送。
    tcp_nopush  on;
    # 配置 nginx 不要缓存数据;应该快速的发送小数据;这仅仅应该用于频繁发送小的碎片信息而无需立刻获取响应的;需要实时传递数据的应用中;。
    tcp_nodelay on;
    # 指定了与客户端的 keep-alive 链接的超时时间。服务器会在这个时间后关闭链接。我们可以降低这个值;以避免让 worker 过长时间的忙碌。
    keepalive_timeout  60s;
    # 限制客户端文件上传下载大小限制;默认1m
    client_max_body_size 20m;
    # 读取请求头的超时时间
    client_header_timeout 60s;
    # 读取请求实体的超时时间
    client_body_timeout 60s;
 
 
    # 开启 gzip 压缩模块
    gzip on;
    # 设置用于压缩响应的缓冲区的数量和大小
    gzip_buffers 16 8k;
    # 设置 gzip 压缩级别;值在 1 到 9 之间;值越大;压缩级别越高;
    gzip_comp_level 6;
    # IE 浏览器不开启 gzip;IE6 以下会乱码
    gzip_disable ;MSIE [1-6].;;
    # 设置压缩所需的最小 HTTP 版本
    gzip_http_version 1.0;
    # 设置将被压缩的返回值的最小长度
    gzip_min_length 1k;
    # 需要压缩的文件的格式
    gzip_types text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png image/tiff image/x-ms-bmp;
    gzip_vary off;
 
    # fastcgi 调优参数
    fastcgi_connect_timeout 300;
    fastcgi_send_timeout 300;
    fastcgi_read_timeout 300;
    fastcgi_buffer_size 64k;
    fastcgi_buffers 4 64k;
    fastcgi_busy_buffers_size 128k;
    fastcgi_temp_file_write_size 128k;
 
    # 关闭页面中的 nginx 版本数字信息;提高安全性。
    server_tokens   off;
 
    # nginx 的 http 块配置文件;可将块配置文件放入该目录。
    include /etc/nginx/conf.d/*.conf;
 
    server {
        listen 80;
        server_name www.ppxxxo.com;
        # http 跳转 https
        rewrite ^(.*) https://$server_name$1 permanent;
    }
    server {
        listen       443 ssl;
        server_name  www.ppxxxo.com;
        ssl_certificate      ssl/ppxxxo.com.pem;
        ssl_certificate_key  ssl/ppxxxo.com.key;
        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;
        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;
 
        access_log  /var/log/nginx/www.ppxxxo.com_access.log  main;
        error_log  /var/log/nginx/www.ppxxxo.com_error.log warn;
 
        # 静态文件
        location / {
            root /usr/share/nginx/html;
            index index.html;
        }
        location /anan/ {
            alias /usr/share/nginx/html/anan/;
            index index.html;
        }
        # 动态请求
        location /base/ {
            proxy_redirect off;
            proxy_set_header    Host spa.asxxxr.net;
            proxy_set_header    X-Real-IP $remote_addr;
            proxy_set_header    X-Forwarded-For $remote_addr;
            proxy_pass http://39.103.221.4:50006/;
        }
 
        # 缓存常见格式的图片
        location ~ .*.(gif|jpg|jpeg|png|bmp|swf|svg|webm)$ {
            # 单位参数;d 天 | H 小时 | M 分
            expires 1h;
        }
    }
}

Nginx HTTP跳转HTTPS

server {
    listen 80;
    server_name admin.alxxj.cn;
    rewrite ^(.*) https://$server_name$1 permanent;
}

Nginx代理PHP服务

server {
    listen               443 ssl;
    server_name          admin.alxxj.cn;
    ssl_certificate      /etc/nginx/conf.d/ssl/admin.alxxj.cn.pem;
    ssl_certificate_key  /etc/nginx/conf.d/ssl/admin.alxxj.cn.key;
    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  5m;
    ssl_protocols        TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers          HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers  on;
 
    index index.html index.php;
    root /var/www/html/alice/admin/web;
 
    rewrite (/.svn|.git/) /404/;
 
    if ($http_user_agent ~* yahoo|bingbot) {
        return 403;
    }
 
    if ($query_string ~* ;.*(insert|select|delete|update|count|master|truncate|declare|;|%27|%22|%3C|%3E|;|%20and%20|%20or%20).*;){
        return 404;
    }
 
    location / {
        try_files $uri $uri/ /index.php$is_args$args;
    }
 
    location ~ .*.(php|php5)?$
    {
        fastcgi_pass  127.0.0.1:9000;
        fastcgi_param ENV ;prod;;
        fastcgi_index index.php;
        include fastcgi.conf;
    }
 
    location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$
    {
        expires 30d;
    }
 
    location ~ .*.(js|css)?$
    {
        expires 1h;
    }
 
    #日志
    access_log  off;
}

Nginx作为代理服务器

Nginx 是一个优秀的高性能代理服务器;可以通过不同的配置进行反向代理、正向代理。

正向代理
正向代理的代理对象是客户端。正向代理就是nginx服务器替客户端去访问目标服务器。

server{
    resolver 8.8.8.8;
    listen 80;
 
    location / {
        proxy_pass http://$http_host$request_uri;
    }
}

在客户端配置 http_proxy 环境变量;export http_proxy=http://你的正向代理服务器地址:代理端口;即可使用代理服务器上网。

通过这种方式访问网站;例如百度。百度那边只能看到nginx服务器的IP;而获取不到你的真实IP。

反向代理
客户端不需要了解nginx服务器后面的服务;直接访问nginx提供的地址。

server {
    listen       80;
    server_name  nginx1.com;
 
    location / {
        proxy_set_header  Host nginx1.com;
        proxy_redirect off;
        proxy_set_header  X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_pass https://www.baidu.com/;
        }
}
 
server {
    listen       80;
    server_name  nginx2.com;
 
    location / {
        proxy_set_header  Host nginx2.com;
        proxy_redirect off;
        proxy_set_header  X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_pass https://www.sina.com.cn/;
        }
}

访问;http://nginx1.com/;出现百度的页面。

访问;http://nginx2.com/;出现新浪的页面。

Nginx作为负载均衡服务器

可以将 nginx 作为一个非常高效的 HTTP 负载均衡器;将流量分配到多个应用服务器上;并通过 nginx 提高 Web 应用的性能、可扩展性和可靠性。

nginx 可以通过添加一个 upstream;来实现 nginx 的负载均衡功能。

upstream myserver {
    server 192.168.1.201;
    server 192.168.1.202;
    }
server {
    listen    80;
    location / {
        proxy_pass http://myserver;
        }
    }

通过这样配置;可以通过访问 nginx 服务器的地址;实现轮询;默认;访问它反向代理的两个后端服务

参数描述backup将服务器标记为备份服务器。当主服务器不可用时;将使用该服务器。down将服务器标记为永久不可用fail_timeout=time在指定次数的不成功尝试与服务器通信的时间范围内;应考虑服务器不可用max_conns=number限制代理服务器的同时活动连接的最大数量。默认值为零;表示没有限制max_fails=number设置与服务器通信失败的最大尝试次数weight=number设置服务器的权重;默认情况下为1

可通过设置权重 weight 来达到性能好的服务器提供更多次的服务目的。如下;201这台服务器提供的访问量就是202服务器的2倍。


upstream myserver {
    server 192.168.1.201 weight=2;
    server 192.168.1.202 weight=1;
    }
server {
    listen    80;
    location / {
        proxy_pass http://myserver;
        }
    }

几种常见的策略:

  • 轮询;默认;;请求过来后;Nginx 随机分配流量到任一服务器
upstream backend {
    server 127.0.0.1:3000;
    server 127.0.0.1:3001;
}
  • weight=number 设置服务器的权重;默认为1;权重大的会被优先分配
upstream backend {
    server 127.0.0.1:3000 weight=2;
    server 127.0.0.1:3001 weight=1;
}
  • backup 标记为备份服务器。当主服务器不可用时;将传递与备份服务器的连接
upstream backend {
    server 127.0.0.1:3000 backup;
    server 127.0.0.1:3001;
}
  • ip_hash 保持会话;保证同一客户端始终访问一台服务器
upstream backend {
    ip_hash; 
    server 127.0.0.1:3000 backup;
    server 127.0.0.1:3001;
}
  • least_conn 优先分配最少连接数的服务器;避免服务器超载请求过多
upstream backend {
    least_conn;
    server 127.0.0.1:3000;
    server 127.0.0.1:3001;
}

Nginx作为静态文件服务器

Nginx 服务器的一个主要任务是提供静态HTML页面、图像或文件访问。

根据请求的不同;文件将从不同的本地目录提供。

/http/www 包含HTML文件
/http/data1/images 包含图像
/http/data2/file 包含文件
目录树;

http/
├── data1
│   └── images
│       ├── 1.jpg
│       └── 2.jpg
├── data2
│   └── file
│       ├── 1.txt
│       └── 1.zip
└── www
    ├── 50x.html
    └── index.html

配置文件;

server {
    listen       80;
    server_name  127.0.0.1;
 
    location / {
        root   /http/www;
        index  index.html index.htm;
    }
 
    location /data1/ {
        root   /http;
    }
 
    location /data2/ {
        root   /http;
    }
 
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root  /http/www;
    }
}

可以访问一下链接查看效果;

HTML静态文件;http://192.168.1.200/

图像浏览;http://218.206.242.148:12345/images/20_csdn.net/20221013/3ak545up44h.jpg

文件下载;http://192.168.1.200/data2/file/1.zip

Nginx反向代理WebSocket服务


server {
    listen       443 ssl;
    server_name  devskt.asxxxd.com;
    ssl_certificate      3986794_devskt.asxxxd.com.pem;
    ssl_certificate_key  3986794_devskt.asxxxd.com.key;
    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  5m;
    ssl_ciphers  HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers  on;
    location / {
    proxy_pass http://172.26.155.95:31114;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection ;upgrade;;
    }
}

Nginx反向代理示例

# http重写方式 一
server {
        listen       80;
        server_name  www.xxx.com;
        rewrite ^ https://$http_host$request_uri? permanent;    # force redirect http to https
    }
 
# http重写方式 二
server {
    listen       80 default_server;
    listen       [::]:80 default_server;
    server_name  spa.asxxxor.net;
    root         /usr/share/nginx/html;
 
    if ($host = ;spa.asdoctor.net;) {
       rewrite ^/(.*)$ https://spa.asxxxor.net permanent;
    }
 
    if ($host = ;http://spa.asdoctor.net;) {
       rewrite ^/(.*)$ https://spa.asxxxor.net permanent;
    }
 
    if ($host = ;https://spa.asdoctor.net;) {
       rewrite ^/(.*)$ https://spa.asxxxor.net permanent;
    }
 
    location / {
    }
    error_page 404 /404.html;
    location = /40x.html {
    }
 
    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
    }
}
# 代理https
server {
    listen       443 ssl;
    server_name  spa.asxxxor.net;
    ssl_certificate      /etc/letsencrypt/live/spa.asxxxor.net/fullchain.pem;
    ssl_certificate_key  /etc/letsencrypt/live/spa.asxxxor.net/privkey.pem;
    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  5m;
    ssl_ciphers  HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers  on;
   location / {
    proxy_set_header  Host spa.asxxxor.net;
    proxy_redirect off;
    proxy_set_header  X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $remote_addr;
    proxy_pass http://172.29.117.155:50099/;
   }
}

Nginx 子路由部署 Recat 项目


location ^~ /anan/ {
        # 项目地址
        alias /usr/local/nginx/html/anan/;
        # 解决刷新报 404
        try_files $uri $uri/ /anan/index.html;
        index index.html;
        access_log  /home/log/nginx/access/www.anan.com.log main;
        error_log   /home/log/nginx/www.anan.com.log warn;
}

Nginx 开启gzip压缩

gzip on;                # 开启Gzip
gzip_min_length  1k;    # 不压缩临界值;大于1K的才压缩;一般不用改
gzip_buffers     4 16k; # 设置用于处理请求压缩的缓冲区数量和大小。
gzip_http_version 1.0;  # 用于识别http协议的版本;早期的浏览器不支持gzip压缩;用户会看到乱码;所以为了支持前期版本加了此选项。
gzip_comp_level 6;      # 设置gzip压缩级别;级别越底压缩速度越快文件压缩比越小;反之速度越慢文件压缩比越大
# 设置需要压缩的MIME类型,如果不在设置类型范围内的请求不进行压缩
gzip_types       text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
gzip_vary on;           # 增加响应头”Vary: Accept-Encoding”

Nginx 跨域问题解决

location / { 
    add_header Access-Control-Allow-Origin *;
    add_header Access-Control-Allow-Methods ;GET, POST, OPTIONS;;
    add_header Access-Control-Allow-Headers ;DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization;;
  
    if ($request_method = ;OPTIONS;) {
        return 204;
    }
}

Access-Control-Allow-Origin

服务器默认是不被允许跨域的。给Nginx服务器配置Access-Control-Allow-Origin *后;表示服务器可以接受所有的请求源;Origin;,即接受所有跨域的请求。

Access-Control-Allow-Headers

是为了防止出现以下错误;Request header field Content-Type is not allowed by Access-Control-Allow-Headers in preflight response.

这个错误表示当前请求Content-Type的值不被支持。其实是我们发起了;application/json;的类型请求导致的。这里涉及到一个概念;预检请求;preflight request;,请看下面;预检请求;的介绍。

Access-Control-Allow-Methods

是为了防止出现以下错误;Content-Type is not allowed by Access-Control-Allow-Headers in preflight response.

给OPTIONS添加204的返回

是为了处理在发送POST请求时Nginx依然拒绝访问的错误;发送;预检请求;时;需要用到方法 OPTIONS ,所以服务器需要允许该方法。

Nginx配置IP黑/白名单

IP访问控制可以加在 nginx 的任意一个块中。如;http、 server、 location。例如我们直接将以下配置加在 http 块中;这样整个 nginx 的服务会受到影响。

deny 192.168.1.66;
allow 192.168.1.0/24;
allow 10.1.20.6/16;
allow 34.26.157.0/24;
deny all;

以上配置实现的效果;

允许 192.168.1.0 该网段;除 192.168.1.66 这个IP都可访问nginx。
允许 10.1.20.6/16 该网段的IP访问。
允许 34.26.157.0/24 该网段的IP访问。
除上面指定的IP范围;其他IP禁止访问。

Nginx配置SSL证书

要设置一个HTTPS服务器;在nginx.conf文件中;在服务器块的listen指令中加入ssl参数;然后指定服务器证书和私钥文件的位置。

server {
    listen       443 ssl;
    server_name  api.pxxxo.com;
    ssl_certificate      /etc/letsencrypt/live/api.pxxxo.com/fullchain.pem;
    ssl_certificate_key  /etc/letsencrypt/live/api.pxxxo.com/privkey.pem;
    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  5m;
    ssl_ciphers  HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers  on;
 
    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }
 
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

ssl_protocols 和 ssl_ciphers 指令可以用来要求客户端在建立连接时只使用SSL/TLS的强版本和密码。

会话存储在工作进程之间共享的SSL会话缓存中;并由ssl_session_cache指令配置。一兆字节的缓存包含大约4000个会话。缓存的默认超时时间是5分钟;这个超时时间可以使用ssl_session_cache指令增加。这个超时时间可以使用ssl_session_timeout指令来增加。

上面是一个为多核系统优化的配置示例;它有1兆字节的共享会话缓存。

Nginx配置动静分离

动静分离的原理;nginx 将客户端发来的请求分为动态请求;php;jsp;cgi;与静态请求;html;css;js和图片资源;;转发给不同的服务器。有负责动态处理的tomcat服务器;也有只负责静态文件存储的服务器。

# 动态页面交给http://myserver
location ~ .*.(php|jsp|cgi)?$
{
     proxy_pass http://tdt_wugk;
}
# 配置Nginx动静分离;定义的静态页面直接从Nginx发布目录读取。
location ~ .*.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css)$
{
root /data/www/file;
# expires定义用户浏览器缓存的时间为3天;如果静态页面不常更新;可以设置更长;这样可以节省带宽和缓解服务器的压力
expires      3d;
}

Nginx 隐性跳转;浏览器保留旧URL;

将 https://sales.bxxxd.cn 隐式转发到 https://sales.oxxxd.com

server {
       listen       80;
       listen       443 ssl;
       server_name  sales.bxxxd.cn;
       access_log  /usr/local/nginx/logs/sales.bxxxd.cn-access.log main;
       error_log  /usr/local/nginx/logs/sales.bxxxd.cn--error.log;

       ssl_certificate      /usr/local/nginx/conf/SSL/scs1665543427707_sales.bxxxd.cn_server.crt;
       ssl_certificate_key  /usr/local/nginx/conf/SSL/scs1665543427707_sales.bxxxd.cn_server.key;
       ssl_session_cache    shared:SSL:1m;
       ssl_session_timeout  5m;
       ssl_ciphers  HIGH:!aNULL:!MD5;
       ssl_prefer_server_ciphers  on;

       location ~* / {
            proxy_redirect off;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass https://sales.oxxxd.com;
    }
}

相关文章

  • ubuntu安装nginx教程_ubuntu服务器安装教程

    ubuntu安装nginx教程_ubuntu服务器安装教程,1、切换到root用户安装 安装最好用root用户安装 不然很多文件权限的报错会让人崩溃...
  • Nginx 的 6 大应用场景!

    Nginx 的 6 大应用场景!,今天给大家分享一下关于Nginx的6大常见运用场景,学会之后就能直接上手用起来~~~一、HTTP服务器Nginx本身也是一个静态资源的服务器,当只有静态资源的时候,就可以使用Nginx来做服务器,如果一个网站只是静态页面的话,那么就可以通过这种方式来实现部署。1、首先在文档根目录​​Docroot(/usr/local/var/www)​​下创建html目录,然后在html中放一个test.h...

网友评论

快盘下载暂未开通留言功能。

关于我们| 广告联络| 联系我们| 网站帮助| 免责声明| 软件发布

Copyright 2019-2029 【快快下载吧】 版权所有 快快下载吧 | 豫ICP备10006759号公安备案:41010502004165

声明: 快快下载吧上的所有软件和资料来源于互联网,仅供学习和研究使用,请测试后自行销毁,如有侵犯你版权的,请来信指出,本站将立即改正。