• nginx安装、升级与基础配置


    目录

    一、Nginx功能介绍

    1、http正向代理与反向代理

    2、负载均衡

    3、web缓存

    4、动静分离

    5、url_hash(第三方)

    6、fair(第三方)

    二、nginx安装

    三、平滑升级nginx

    四、nginx基础配置

    1、主配置文件

    2、用户认证

    3、虚拟主机

    五、nginx.conf配置文件说明

    1、nginx配置结构

    2、nginx.conf配置详细说明


    一、Nginx功能介绍

    1、http正向代理与反向代理

    正向代理:

    在服务器端想要获取客户端信息时保护客户端,暴露的是代理服务器的地址,隐藏了真实的客户端的地址。

     反向代理:

    在客户端想要获取服务器端信息时保护服务端,暴露的是代理服务器的地址,隐藏了真实的服务端地址。

    2、负载均衡

     Nginx提供的负载均衡策略有2种:内置策略和扩展策略。内置策略为轮询,加权轮询,ip_hash。

    默认平均轮询RA:

    1. #默认平均轮询RA
    2. #每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
    3. 简单配置
    4. upstream test {
    5. server localhost:8080;
    6. server localhost:8081;
    7. }
    8. server {
    9. listen 81;
    10. server_name localhost;
    11. client_max_body_size 1024M;
    12. location / {
    13. proxy_pass http://test;
    14. proxy_set_header Host $host:$server_port;
    15. }
    16. }

    加权轮询:

    1. #加权轮询
    2. upstream test {
    3. server localhost:8080 weight=9;
    4. server localhost:8081 weight=1;
    5. }

    IP_Hash图如下:

    对客户端请求的ip进行hash操作,然后根据hash结果将同一个客户端ip的请求分发给同一台服务器进行处理,可以解决session不共享的问题。

    1. #IP_HASH示例配置
    2. upstream test {
    3. ip_hash;
    4. server localhost:8080;
    5. server localhost:8081;
    6. }

    3、web缓存

    Nginx可以对不同的文件做不同的缓存处理,配置灵活,并且支持FastCGI_Cache,主要用于对FastCGI的动态程序进行缓存。配合着第三方的ngx_cache_purge,对制定的URL缓存内容可以的进行增删管理。

    4、动静分离

    Nginx提供的动静分离是指把动态请求和静态请求分离开,合适的服务器处理相应的请求,使整个服务器系统的性能、效率更高。Nginx可以根据配置对不同的请求做不同转发,这是动态分离的基础。静态请求对应的静态资源可以直接放在Nginx上做缓冲,更好的做法是放在相应的缓冲服务器上。动态请求由相应的后端服务器处理。
     

    5、url_hash(第三方)

    按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。 在upstream中加入hash语句,server语句中不能写入weight等其他的参数,hash_method是使用的hash算法。

    1. #url_hash示例配置
    2. upstream backend {
    3. hash $request_uri;
    4. hash_method crc32;
    5. server localhost:8080;
    6. server localhost:8081;
    7. }

    6、fair(第三方)

    按后端服务器的响应时间来分配请求,响应时间短的优先分配。

    1. #fair示例配置
    2. upstream backend {
    3. fair;
    4. server localhost:8080;
    5. server localhost:8081;
    6. }

    二、nginx安装

    nginx下载地址:nginx: download

    1. yum install gcc pcre-devel openssl-devel -y #安装基础编译环境
    2. useradd nginx #创建nginx用户
    3. tar -xvf nginx-1.16.1.tar.gz #解压
    4. cd nginx-1.16.1
    5. #--prefix为指定安装目录,--user为指定账户名称,--group为指定组名称,--with-http_ssl_module为支持加密功能
    6. #--with-stream为TCP/UDP代理功能的模块,使用Nginx四层代理的时候会用到,--with-http_stub_status_module为开启status状态功能,可以查看nginx连接数等信息
    7. ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-stream --with-http_stub_status_module
    8. make && make install #编译安装

    安装完成会在/usr/local下生成nginx文件,其中:

    /usr/local/nginx       #安装目录

    conf/nginx.conf      #主配置文件

    html                       #网页目录

    logs                       #日志文件

    sbin/nginx             #服务启动可执行文件

    启动nginx服务:

    /usr/local/nginx/sbin/nginx

    常用选项:

    -V :查看编译参数

    -c :指定配置文件,启动服务

    -t :测试配置文件语法是否有错误

    web访问测试,默认80端口,直接浏览器访问ip即可:

    关闭nginx:

    /usr/local/nginx/sbin/nginx -s stop

    重新加载配置:

    /usr/local/nginx/sbin/nginx -s reload

    三、平滑升级nginx

    1. tar -xvf nginx-1.18.0.tar.gz #下载并解压更高版本nginx
    2. cd nginx-1.18.0
    3. ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module
    4. make #不要make install
    5. mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.old
    6. cp objs/nginx /usr/local/nginx/sbin/
    7. make upgrade #杀死老版本nginx进程,启动新版本nginx,如果报错也可以手动启动nginx

    验证升级后版本:

    /usr/local/nginx/sbin/nginx -V

    四、nginx基础配置

    1、主配置文件

    主配置文件路径:/usr/local/nginx/conf/nginx.conf

    1. #user nobody;
    2. worker_processes 1; #启动几个进程,默认是1个进程
    3. #error_log logs/error.log; #日志存放位置
    4. #error_log logs/error.log notice;
    5. #error_log logs/error.log info;
    6. #pid logs/nginx.pid;
    7. events {
    8. worker_connections 1024; #nginx并发量,默认1024
    9. }
    10. http {
    11. include mime.types;
    12. default_type application/octet-stream;
    13. #log_format main '$remote_addr - $remote_user [$time_local] "$request" '
    14. # '$status $body_bytes_sent "$http_referer" '
    15. # '"$http_user_agent" "$http_x_forwarded_for"';
    16. #access_log logs/access.log main;
    17. sendfile on;
    18. #tcp_nopush on;
    19. #keepalive_timeout 0;
    20. keepalive_timeout 65;
    21. #gzip on;
    22. server {
    23. listen 80; #监听端口
    24. server_name localhost; #域名
    25. #charset koi8-r;
    26. #access_log logs/host.access.log main;
    27. location / {
    28. root html; #网站根路径,默认html,是相对路径,即/usr/local/nginx/html
    29. index index.html index.htm; #网站默认首页
    30. }
    31. #error_page 404 /404.html;
    32. # redirect server error pages to the static page /50x.html
    33. #
    34. error_page 500 502 503 504 /50x.html;
    35. location = /50x.html {
    36. root html;
    37. }
    38. # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    39. #
    40. #location ~ \.php$ {
    41. # proxy_pass http://127.0.0.1;
    42. #}
    43. # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    44. #
    45. #location ~ \.php$ {
    46. # root html;
    47. # fastcgi_pass 127.0.0.1:9000;
    48. # fastcgi_index index.php;
    49. # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
    50. # include fastcgi_params;
    51. #}
    52. # deny access to .htaccess files, if Apache's document root
    53. # concurs with nginx's one
    54. #
    55. #location ~ /\.ht {
    56. # deny all;
    57. #}
    58. }
    59. # another virtual host using mix of IP-, name-, and port-based configuration
    60. #
    61. #server {
    62. # listen 8000;
    63. # listen somename:8080;
    64. # server_name somename alias another.alias;
    65. # location / {
    66. # root html;
    67. # index index.html index.htm;
    68. # }
    69. #}
    70. # HTTPS server
    71. #
    72. #server {
    73. # listen 443 ssl;
    74. # server_name localhost;
    75. # ssl_certificate cert.pem;
    76. # ssl_certificate_key cert.key;
    77. # ssl_session_cache shared:SSL:1m;
    78. # ssl_session_timeout 5m;
    79. # ssl_ciphers HIGH:!aNULL:!MD5;
    80. # ssl_prefer_server_ciphers on;
    81. # location / {
    82. # root html;
    83. # index index.html index.htm;
    84. # }
    85. #}
    86. }

    2、用户认证

    设置需要输入用户名密码,才能访问网站,修改主配置文件:

    vim /usr/local/nginx/conf/nginx.conf

    server {
            listen       80;
            server_name  localhost;
            auth_basic   "auth-domain";                             #密码框提示信息,会显示auth-domain
            auth_basic_user_file   /usr/local/nginx/pass;   #定义用户名和密码存放文件

    ......
    }

    1. yum -y install httpd-tools
    2. htpasswd -c /usr/local/nginx/pass admin #创建认证用户admin,用户名可自定义,回车输入密码,-c为create的意思
    3. htpasswd /usr/local/nginx/pass admin2 #也可追加认证用户admin2,注意追加没有-c,如果有-c会覆盖之前的用户

    密码为加密存储 :

    /usr/local/nginx/sbin/nginx -s reload   #reload重新加载配置文件

    web访问:

    3、虚拟主机

    虚拟主机可以实现一个nginx提供多个网站的访问

    (1)基于域名的虚拟主机

    server {

            listen   80;

            server_name  web1.tedu.cn;       #域名1

            ...  ...

    }

    server {

            listen   80;

            server_name   web2.tedu.cn;       #域名2

            ... ...

    }

    (2)基于端口的虚拟主机

    server {

            listen   8080;                                #端口

            server_name  web1.tedu.cn;       #域名

            ...  ...

    }

    server {

            listen   8000;                                 #端口

            server_name   web1.tedu.cn;       #域名

            ... ...

    }

    (3)基于IP的虚拟主机(服务器有多个网卡和IP时)

    server {

            listen   192.168.1.212:80;                                #端口

            server_name  web1.tedu.cn;                          #域名

            ...  ...

    }

    server {

            listen   192.168.1.213:80;                                 #端口

            server_name   web1.tedu.cn;                           #域名

            ... ...

    }

    以基于域名的虚拟主机为例演示:

    修改和添加2个server配置:

    1. server {
    2. listen 80;
    3. server_name web1.tedu.cn;
    4. #charset koi8-r;
    5. #access_log logs/host.access.log main;
    6. location / {
    7. root html;
    8. index index.html index.htm;
    9. }
    10. ... ...
    11. }
    12. server {
    13. listen 80;
    14. server_name web2.tedu.cn;
    15. location / {
    16. root web; #修改根目录为web,以便展示效果,不然还是访问的html相同内容
    17. index index.html index.htm;
    18. }
    19. }

    如上图需在/usr/local/nginx下手动创建一个web目录,并拷贝一个index.html首页过去,自定义修改下内容。

    /usr/local/nginx/sbin/nginx -s reload    #重新加载配置

    客户端测试:如果windows浏览器远程访问,由于没配dns,可以手动加一下hosts文件进行域名解析:

    文件路径  C:\Windows\System32\drivers\etc\hosts

     web访问测试:

    五、nginx.conf配置文件说明

    1、nginx配置结构

    ...              #全局块
    
    events {         #events块
       ...
    }
    
    http      #http块
    {
        ...   #http全局块
        server        #server块
        { 
            ...       #server全局块
            location [PATTERN]   #location块
            {
                ...
            }
            location [PATTERN] 
            {
                ...
            }
        }
        server
        {
          ...
        }
        ...     #http全局块
    }

     【释义】:

    1. 全局块:配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等。
    2. events块:配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。
    3. http块:可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。
    4. server块:配置虚拟主机的相关参数,一个http中可以有多个server。
    5. location块:配置请求的路由,以及各种页面的处理情况。

    2、nginx.conf配置详细说明

    1. ########### 每个指令必须有分号结束。#################
    2. #
    3. #user nobody; #设置worker进程的用户,指的linux中的用户,会涉及到nginx操作目录或文件的一些权限,示例:#user administrator administrators; #配置用户或者组,默认为nobody nobody
    4. worker_processes 1; #worker进程工作数设置,一般来说CPU有几个,就设置几个,或者设置为N-1也行
    5. #error日志设置,语法:error_log /path/file level; 当path/file 的值为 /dev/null时,这样就不会输出任何日志了,这也是关闭error日志的唯一手段
    6. #leve的取值范围是debug、info、notice、warn、error、crit、alert、emerg从左至右级别依次增大
    7. #如果设定的日志级别是debug,则会输出所有的日志,这一数据量会很大,需要预先确保/path/file所在的磁盘有足够的磁盘空间。级别设定到debug,必须在configure时加入 --with-debug配置项
    8. #error_log logs/error.log;
    9. #error_log logs/error.log notice;
    10. #error_log logs/error.log info;
    11. #pid logs/nginx.pid; #设置nginx进程 pid,pid文件(master进程ID的pid文件存放路径)的路径
    12. events { #events,设置工作模式,默认使用epoll
    13. #仅对指定的客户端输出debug级别的日志: 语法:debug_connection[IP|CIDR]
    14. #这个设置项实际上属于事件类配置,因此必须放在events{……}中才会生效。它的值可以是IP地址或者是CIRD地址。
    15. #debug_connection 10.224.66.14; #或是debug_connection 10.224.57.0/24
    16. #这样,仅仅以上IP地址的请求才会输出debug级别的日志,其他请求仍然沿用error_log中配置的日志级别。
    17. #注意:在使用debug_connection前,需确保在执行configure时已经加入了--with-debug参数,否则不会生效。
    18. worker_connections 1024; #每个worker允许连接的客户端最大连接数
    19. }
    20. http { #http 是指令块,针对http网络传输的一些指令配置
    21. include mime.types; #include 引入外部配置,提高可读性,避免单个配置文件过大
    22. default_type application/octet-stream;
    23. #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' #设定日志格式,main为定义的格式名称,如此 access_log 就可以直接使用这个变量了,详细参数名,见下方表格
    24. # '$status $body_bytes_sent "$http_referer" '
    25. # '"$http_user_agent" "$http_x_forwarded_for"';
    26. #access_log logs/access.log main;
    27. sendfile on; #sendfile使用高效文件传输,提升传输性能。启用后才能使用tcp_nopush,是指当数据表累积一定大小后才发送,提高了效率
    28. #tcp_nopush on;
    29. #keepalive_timeout 0; #keepalive_timeout设置客户端与服务端请求的超时时间,保证客户端多次请求的时候不会重复建立新的连接,节约资源损耗
    30. keepalive_timeout 65;
    31. #gzip on; #gzip启用压缩,html/js/css压缩后传输会更快
    32. server { #server可以在http指令块中设置多个虚拟主机,一个server块是一个虚拟主机
    33. listen 80; #监听端口
    34. server_name localhost; #域名、监听地址,其后可以跟多个主机名称
    35. #charset koi8-r;
    36. #access_log logs/host.access.log main;
    37. location / { #请求路由映射,匹配拦截,
    38. root html; #网页根目录
    39. index index.html index.htm; #首页位置
    40. #proxy_pass http://mysvr; #请求转向mysvr 定义的服务器列表
    41. #deny 127.0.0.1; #拒绝的ip
    42. #allow 172.18.5.54; #允许的ip
    43. }
    44. #upstream mysvr {
    45. # server 127.0.0.1:7878;
    46. # server 192.168.10.121:3333 backup; #热备
    47. #}
    48. #error_page 404 /404.html; #404错误页面,可以自定义成:error_page 404 https://www.baidu.com;
    49. # redirect server error pages to the static page /50x.html
    50. #
    51. error_page 500 502 503 504 /50x.html;
    52. location = /50x.html {
    53. root html;
    54. }
    55. # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    56. #
    57. #location ~ \.php$ { #请求的url过滤,正则匹配,~为区分大小写,~*为不区分大小写
    58. # proxy_pass http://127.0.0.1;
    59. #}
    60. # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    61. #
    62. #location ~ \.php$ {
    63. # root html;
    64. # fastcgi_pass 127.0.0.1:9000;
    65. # fastcgi_index index.php;
    66. # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
    67. # include fastcgi_params;
    68. #}
    69. # deny access to .htaccess files, if Apache's document root
    70. # concurs with nginx's one
    71. #
    72. #location ~ /\.ht {
    73. # deny all;
    74. #}
    75. }
    76. # another virtual host using mix of IP-, name-, and port-based configuration
    77. #
    78. #server {
    79. # listen 8000;
    80. # listen somename:8080;
    81. # server_name somename alias another.alias;
    82. # location / {
    83. # root html;
    84. # index index.html index.htm;
    85. # }
    86. #}
    87. # HTTPS server
    88. #
    89. #server {
    90. # listen 443 ssl;
    91. # server_name localhost;
    92. # ssl_certificate cert.pem;
    93. # ssl_certificate_key cert.key;
    94. # ssl_session_cache shared:SSL:1m;
    95. # ssl_session_timeout 5m;
    96. # ssl_ciphers HIGH:!aNULL:!MD5;
    97. # ssl_prefer_server_ciphers on;
    98. # location / {
    99. # root html;
    100. # index index.html index.htm;
    101. # }
    102. #}
    103. }

  • 相关阅读:
    VS2015没有“Win32控制台应用程序”模块
    docker自定义镜像
    资深Java工程师蚂蚁金服三面详解,看完你也可以拿offer
    思维分析逻辑 1 DAY
    ClassLoder类加载机制
    手把手教你sql触发器的使用
    Burpsuite简介及MIME上传绕过实例
    [Linux/UOS]同一解决方案下的控制台程序依赖SO库的方法
    获取网卡上的IP、网关及DNS信息,获取最佳路由,遍历路由表中的条目(附源码)
    AntV的g6库纵向的紧凑树形节点之间箭头被覆盖
  • 原文地址:https://blog.csdn.net/qq_28903377/article/details/127835662