社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  NGINX

Nginx 配置详解

jane_daydayup • 3 年前 • 297 次点击  
阅读 15

Nginx 配置详解

公司新版的管理系统使用前后端分离,所以前后端要分别配置 nginx 。所以认真学习了一下nginx 的配置,nginx 的配置文件保存在在 conf 目录下

image.png

1. 各个配置文件说明

1.1 fastcgi.conf,fastcgi 相关参数的配置文件

对比下 fastcgi.conf 与 fastcgi_params 文件,可以看出只有以下差异: 即 fastcgi.conf 只比 fastcgi_params 多了一行“ fastcgi_param SCRIPT_FILENAME documentrootdocument_root fastcgi_script_name;” 原本只有fastcgi_params文件,fastcgi.conf 是 Nginx 0.8.30 (released: 15th of December 2009)才引入的。主要为是解决以下问题: 参考

原本 Nginx 只有 fastcgi_params ,后来发现很多人在定义 SCRIPT_FILENAME 时使用了硬编码的方式。例如,fastcgi_param SCRIPT_FILENAME /var/www/foofastcgiscriptname。于是为了规范用法便引入了fastcgi.conf。不过这样的话就产生一个疑问:为什么一定要引入一个新的配置文件,而不是修改旧的配置文件?这是因为fastcgiparam指令是数组型的,和普通指令相同的是:内层替换外层;和普通指令不同的是:当在同级多次使用的时候,是新增而不是替换。换句话说,如果在同级定义两次SCRIPTFILENAME,那么它们都会被发送到后端,这可能会导致一些潜在的问题,为了避免此类情况,便引入了一个新的配置文件因此不再建议大家使用以下方式(搜了一下,网上大量的文章,并且nginx.conf的默认配置也是使用这种方式):fastcgiparamSCRIPTFILENAMEfastcgi_script_name 。于是为了规范用法便引入了 fastcgi.conf。 不过这样的话就产生一个疑问:为什么一定要引入一个新的配置文件,而不是修改旧的配置文件?这是因为 fastcgi_param 指令是数组型的,和普通指令相同的是:内层替换外层;和普通指令不同的是:当在同级多次使用的时候,是新增而不是替换。换句话说,如果在同级定义两次 SCRIPT_FILENAME,那么它们都会被发送到后端,这可能会导致一些潜在的问题,为了避免此类情况,便引入了一个新的配置文件因此不再建议大家使用以下方式(搜了一下,网上大量的文章,并且 nginx.conf 的默认配置也是使用这种方式): fastcgi_param SCRIPT_FILENAME document_root$fastcgi_script_name; include fastcgi_params;

1.2 fastcgi_params,fastcgi 相关参数的配置文件

nginx 配置 Fastcgi 解析时会调用 fastcgi_params 配置文件来传递服务器变量,这样 CGI 中可以获取到这些变量的值

image.png

1.3 koi-utf、koi-win、win-utf

这三个文件都是与编码转换映射文件,用于在输出内容到客户端时,将一种编码转换到另一种编码。

koi-win: charset_map  koi8-r < -- > windows-1251
koi-utf: charset_map  koi8-r < -- > utf-8
win-utf: charset_map  windows-1251 < -- > utf-8
复制代码

koi8-r 是斯拉夫文字8位元编码,供俄语及保加利亚语使用。在Unicode未流行之前,KOI8-R 是最为广泛使用的俄语编码,使用率甚至起ISO/IEC 8859-5还高。这3个文件存在是因为作者是俄国人的原因

1.4 mime.types

文件扩展名与文件类型映射表,nginx 根据映射关系,设置 http 请求响应头的 Content-Type 值。当在映射表找不到时,使用 nginx.conf 中 default-type 指定的默认值。 例如,默认配置中的指定的 default-type 为 application/octet-stream 。 include mime.types; default_type application/octet-stream; 默认下面截一段 mime.types 定义的文件扩展名与文件类型映射关系

image.png

1.6 uwsgi_params 和 scgi_params

与 fastcgi_params 一样,传递服务器变量,只有前缀不一样,以 uwsgi_param 或 scgi_param 开始而非 fastcgi_param。

2. nginx.conf 配置文件

配置文件结构

# 全局块
...              
# events块
events {         
   ...
}
# http块
http      
{
    # http全局块
    ...   
    # 虚拟主机server块
    server        
    { 
        # server全局块
        ...       
        # location块
        location [PATTERN]   
        {
            ...
        }
    }
    # http全局块
    ...     
}
复制代码

1、全局块:配置影响 nginx 全局的指令。一般有运行 nginx 服务器的用户组,nginx 进程 pid 存放路径,日志存放路径,配置文件引入,允许生成 worker process 数等。

2、events 块:配置影响 nginx 服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。

3、http 块:可以嵌套多个 server ,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type 定义,日志自定义,是否使用 sendfile 传输文件,连接超时时间,单连接请求数等。

4、server 块:配置虚拟主机的相关参数,一个 http 中可以有多个 server。

5、location 块:配置请求的路由,以及各种页面的处理情况。

以下是本人的本地开发的 nginx.conf 文件

user   Jane;  #配置用户或者组,nginx的worker进程用哪个用户和组进行登录,默认为nobody nobody
worker_processes  1; #允许生成的进程数,默认为1

#error_log  logs/error.log; #制定日志路径,级别。这个设置可以放入全局块,http块,server块,级别以此为:debug|info|notice|warn|error|crit|alert|emerg

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

#pid        logs/nginx.pid; #指定nginx进程运行文件存放地址,进程作为系统的守护进程运行,就需要在某个文件中保存进程的ID号


events {
    #accept_mutex on;   #设置网路连接序列化,防止惊群现象发生,默认为on
    #multi_accept on;  #设置一个进程是否同时接受多个网络连接,默认为off
    #use epoll;      #事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport
    worker_connections  1024;    #最大连接数,默认为512
}


http {
    include       mime.types;  #文件扩展名与文件类型映射表
    default_type  application/octet-stream; #默认文件类型,默认为text/plain
    #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;  #combined为日志格式的默认值

    sendfile        on;  #允许sendfile方式传输文件,默认为off,可以在http块,server块,location块。
    #tcp_nopush     on;  #是否启用AIO机制,默认是OFF,在Linux 2.6.22内核及后续版本才支持。

    #keepalive_timeout  0;
    keepalive_timeout  65; #一次长连接允许发起的最大请求数量,用户与服务器建立连接后,通过此连接可以发起的最多多少次请求,该参数可以定义在http{}段中,也可以定义在server{}段中、location{}段中

    #gzip  on;  #gzip实现压缩的时候使用缓冲的大小,第一个参数是缓存空间个数,第二个是缓存大小。默认情况下


    include conf.d/*;  #表示包含当前路径下目录中的所有文件

    gzip on; #开启或关闭 gzip on off, gzip实现压缩的时候使用缓冲的大小,第一个参数是缓存空间个数,第二个是缓存大小
    gzip_disable "msie6"; #不适用 gzip IE6
    gzip_min_length 1k; #gzip 压缩最小文件大小,超出进行压缩
    gzip_buffers 4 16k; #buffer 不用修改
    #gzip_http_version 1.1; #gzip 支持的 http 协议
    gzip_comp_level 8; #压缩级别:1-10,数字越大压缩得越好,时间也越长
    gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png; #压缩文件
}
复制代码

3. 虚拟主机配置

    server {
        listen       8089 default_server;  # 监听端口
        listen       [::]:8089 default_server;  # ipv6
        server_name  localhost; # 服务域名

        root         /Users/luomeizhen/develop/AOS/www/aos_server/public;  # 默认网站根目录(www目录)

        location / {
            index index.php index.html index.htm;
	    if (!-e $request_filename) {
   		rewrite  ^(.*)$  /index.php?s=/$1  last;
   	    }
        }

        error_page 404 /404.html;  #重定向页面
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;  #重定向页面
            location = /50x.html {
        }

        # PHP 脚本请求全部转发到 FastCGI处理. 使用FastCGI协议默认配置.
        # Fastcgi服务器和程序(PHP,Python)沟通的协议.
        location ~ \.php$ {
            # 设置监听端口
            fastcgi_pass   127.0.0.1:9000;
            # 设置nginx的默认首页文件(上面已经设置过了,可以删除)
            fastcgi_index  index.php;
            # 设置脚本文件请求的路径
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            # 引入fastcgi的配置文件
            include        fastcgi_params;
        }
    }
    
# https 配置
server {  
    listen 192.168.1.11:443;  #ssl端口  
    server_name  test.com;  
    #为一个server{......}开启ssl支持  
    ssl on;  
    #指定PEM格式的证书文件   
    ssl_certificate      /etc/nginx/test.pem;   
    #指定PEM格式的私钥文件  
    ssl_certificate_key  /etc/nginx/test.key;  
}  


复制代码

4.location 配置

# uri 匹配
location = / {
    # 完全匹配  =
    # 大小写敏感 ~
    # 忽略大小写 ~*
}
location ^~ /images/ {
    # 前半部分匹配 ^~
    # 可以使用正则,如:
    # location ~* \.(gif|jpg|png)$ { }
}
location / {
    # 如果以上都未匹配,会进入这里
}

# 1. 根目录
location / {
    root /home/barret/test/;
}
# 2. 别名
location /blog {
    alias /home/barret/www/blog/;
}
# 3. try_files
try_files $uri $uri.html $uri/index.html @other;
location @other {
    # 尝试寻找匹配 uri 的文件,失败了就会转到上游处理
    proxy_pass  http://localhost:9000;
}
location / {
    # 尝试寻找匹配 uri 的文件,没找到直接返回 502
    try_files $uri $uri.html =502;
}
# 4. 反向代理
location / {
    proxy_pass_header Server; 
    proxy_set_header Host $http_host;  #所请求的目的主机名
    proxy_set_header X-Real-IP $remote_addr;   #把真实客户端IP写入到请求头X-Real-IP
    proxy_set_header X-Scheme $scheme;  
    proxy_pass http//ggzy;  # 代理的ip地址和端口号
}

复制代码

本文参考原文: www.cnblogs.com/mikeluwen/p… juejin.cn/post/684490…

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/114014
 
297 次点击