Nginx配置文件路径

不同安装方式,nginx的文件存放路径也有所不同。

源码编译安装方式:通常在/usr/local/nginx/conf目录下。

yum安装方式:通常在/etc/nginx/目录(主配置文件)与/etc/nginx/conf.d目录下。

Docker启动的nginx,一般也在/etc/nginx目录下。

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.weijishu.cn;        # http 跳转 https        rewrite ^(.*) https://$server_name$1 permanent;    }    server {        listen       443 ssl;        server_name  www.weijishu.cn;        ssl_certificate      ssl/weijishu.cn.pem;        ssl_certificate_key  ssl/weijishu.cn.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.weijishu.cn_access.log  main;        error_log  /var/log/nginx/www.weijishu.cn_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 www.weijishu.cn;    rewrite ^(.*) https://$server_name$1 permanent;}

Nginx代理PHP服务

server {    listen               443 ssl;    server_name          www.weijishu.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  weijishu.cn;     location / {        proxy_set_header  Host weijishu.cn;        proxy_redirect off;        proxy_set_header  X-Real-IP $remote_addr;        proxy_set_header X-Forwarded-For $remote_addr;        proxy_pass https://www.weijishu.cn/;        }} server {    listen       80;    server_name  weijishu.cn;     location / {        proxy_set_header  Host weijishu.cn;        proxy_redirect off;        proxy_set_header  X-Real-IP $remote_addr;        proxy_set_header X-Forwarded-For $remote_addr;        proxy_pass https://www.weijishu.cn/;        }}

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://192.168.1.200/data1/images/1.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.weijishu.cn.pem;    ssl_certificate_key  3986794_devskt.weijishu.cn.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.weijishu.cn;        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.weijishu.cn;    root         /usr/share/nginx/html;     if ($host = "spa.weijishu.cn") {       rewrite ^/(.*)$ https://spa.weijishu.cn permanent;    }     if ($host = "http://spa.weijishu.cn") {       rewrite ^/(.*)$ https://spa.weijishu.cn permanent;    }     if ($host = "https://spa.weijishu.cn") {       rewrite ^/(.*)$ https://spa.weijishu.cn permanent;    }     location / {    }    error_page 404 /404.html;    location = /40x.html {    }     error_page 500 502 503 504 /50x.html;    location = /50x.html {    }}# 代理httpsserver {    listen       443 ssl;    server_name  spa.weijishu.cn;    ssl_certificate      /etc/letsencrypt/live/spa.weijishu.cn/fullchain.pem;    ssl_certificate_key  /etc/letsencrypt/live/spa.weijishu.cn/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.weijishu.cn;    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;                # 开启Gzipgzip_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.weijishu.cn;    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://myserverlocation ~ .*.(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.weijishu.cn

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://weijishu.cn;    }}
server {    listen       443 ssl;    server_name  xt.pxxxo.com;    ssl_certificate      ssl/pxxxo.com.pem;    ssl_certificate_key  ssl/pxxxo.com.key;    ssl_session_cache    shared:SSL:1m;    ssl_session_timeout  5m;    ssl_ciphers  HIGH:!aNULL:!MD5;    ssl_prefer_server_ciphers  on;

    access_log  logs/access_xt.log  main;    error_log logs/error_xt.log error;

    location / {    rewrite  ^.+apis/?(.*)$ /$1 break;    proxy_pass https://data.chxxxxc.org/;   }}

本篇文章来源于微信公众号: 微技术之家



微信扫描下方的二维码阅读本文

此作者没有提供个人介绍
最后更新于 2023-05-28