问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Nginx 安装和基本配置 (保姆级)

创作时间:
作者:
@小白创作中心

Nginx 安装和基本配置 (保姆级)

引用
CSDN
1.
https://blog.csdn.net/weixin_65644655/article/details/142861486

Nginx(发音为 "engine x")是一个高性能的HTTP和反向代理服务器,同时也提供了邮件代理服务。它以其高并发处理能力、低资源消耗和灵活的配置而闻名,广泛应用于各种Web服务器和反向代理场景。本文将详细介绍Nginx的安装过程和基本配置,帮助读者快速掌握Nginx的使用方法。

Nginx基本介绍

  1. 反向代理:通过指定IP访问不同微服务
  2. 负载均衡:轮询访问服务
  3. 动静分离:优化资源加载
  4. 高可用集群:提高系统稳定性
  5. 在微服务架构中的位置:作为API网关或前端代理

Nginx核心功能介绍

  1. 正向代理:代理客户端请求
  2. 反向代理:代理服务器请求
  3. 传统项目资源部署:静态资源部署
  4. 动静分离项目资源部署:动态和静态资源分离部署

Nginx下载安装(Linux环境)

Linux虚拟机环境准备

  1. 使用ifconfig命令找到IP地址
  2. 使用Xshell远程登录(root-root)
  3. 使用ping命令检查外网连接
  4. 配置网关以确保网络连通

具体安装配置

  1. 前提条件

  2. 搭建gcc环境

    yum -y install gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel
    
  3. 下载并解压Nginx

    # 创建文件夹
    mkdir -p /usr/local/nginx
    # 下载Nginx
    wget http://nginx.org/download/nginx-1.17.0.tar.gz
    # 解压
    tar -zxvf nginx-1.17.0.tar.gz
    
  4. 配置Nginx路径

    ./configure --prefix=/usr/local/nginx --pid-path=/var/run/nginx/nginx.pid \
    --lock-path=/var/lock/nginx.lock --error-log-path=/var/log/nginx/error.log \
    --http-log-path=/var/log/nginx/access.log --with-http_gzip_static_module \
    --http-client-body-temp-path=/var/temp/nginx/client --http-proxy-temp-path=/var/temp/nginx/proxy \
    --http-fastcgi-temp-path=/var/temp/nginx/fastcgi --http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
    --http-scgi-temp-path=/var/temp/nginx/scgi --conf-path=/usr/local/nginx/nginx.conf
    
  5. 编译并安装

    make
    make install
    
  6. 测试Nginx

    ./sbin/nginx -t
    
  7. 启动Nginx

    ./sbin/nginx -c nginx.conf
    
  8. 查看Nginx进程

    ps -ef | grep nginx
    
  9. 检查端口监听

    netstat -anp | more
    
  10. 访问Nginx
    在浏览器中输入http://localhost:80/

配置Windows访问Nginx

  1. 打开虚拟机的80端口

    firewall-cmd --permanent --add-port=80/tcp
    firewall-cmd --reload
    firewall-cmd --query-port=80/tcp
    
  2. Windows访问
    在浏览器中输入虚拟机的IP地址,例如http://192.168.200.128/

Nginx常用命令

  1. 启动

    ./sbin/nginx -c nginx.conf
    
  2. 重新加载配置

    ./sbin/nginx -s reload
    
  3. 停止

    ./sbin/nginx -s stop
    
  4. 查看版本

    ./sbin/nginx -v
    ./sbin/nginx -V
    

Nginx配置文件详解

Nginx的主要配置文件是nginx.conf,位于Nginx的安装目录下。以下是一些关键配置项的说明:

# Nginx用户及组
# user  nobody;

# 工作进程数
worker_processes  1;

# 错误日志
# error_log  logs/error.log;
# error_log  logs/error.log  notice;
# error_log  logs/error.log  info;

# pid文件路径
pid       /usr/local/nginx/logs/nginx.pid;

# 单个进程能打开的文件描述符最大值
worker_rlimit_nofile 65535;

events {
    # 使用epoll的I/O模型
    use epoll;

    # 单个进程最大连接数
    worker_connections  1024;

    # 客户端请求头部的缓冲区大小
    # client_header_buffer_size 4k;
}

http {
    # 设定mime类型
    include       mime.types;

    default_type  application/octet-stream;

    # 日志格式设置
    # 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/host.access.log  main;
    # access_log  logs/host.access.404.log  log404;

    # 服务器名字的hash表大小
    server_names_hash_bucket_size 128;

    # 客户端请求头缓冲大小
    # client_header_buffer_size 32k;
    # large_client_header_buffers 4 32k;

    # 隐藏Nginx版本号
    # server_tokens off;

    # 忽略不合法的请求头
    # ignore_invalid_headers   on;

    # 让 Nginx 在处理自己内部重定向时不默认使用  server_name设置中的第一个域名
    # server_name_in_redirect off;

    # 客户端请求体的大小
    # client_body_buffer_size    8m;

    # 开启文件传输
    sendfile        on;

    # 告诉Nginx在一个数据包里发送所有头文件
    # tcp_nopush     on;

    # tcp_nodelay off 会增加通信的延时,但是会提高带宽利用率
    # tcp_nodelay on,会增加小包的数量,但是可以提高响应速度
    tcp_nodelay on;

    # 长连接超时时间
    keepalive_timeout  65;

    # gzip模块设置
    # gzip  on;
    # gzip_min_length  1k;
    # gzip_buffers     4 16k;
    # gzip_http_version 1.0;
    # gzip_comp_level 2;
    # gzip_types   text/plain text/css text/xml text/javascript application/json application/x-javascript application/xml application/xml+rss;

    # 负载均衡配置
    upstream myServer {
        server  192.168.247.129:8080 max_fails=3 weight=2;
        server  192.168.247.129:8081 max_fails=3 weight=4;
    }

    server {
        listen       80;
        server_name  192.168.247.129;

        # 反向代理配置
        location / {
            proxy_pass http://myServer;
            proxy_connect_timeout 20;
            client_max_body_size       10m;
            client_body_buffer_size    128k;
            proxy_send_timeout         300;
            proxy_read_timeout         300;
            proxy_buffer_size          4k;
            proxy_buffers              4 32k;
            proxy_busy_buffers_size    64k;
            proxy_temp_file_write_size 64k;
        }

        # 静态资源配置
        location /image/ {
            root /source/;
            autoindex on;
        }

        # 错误页面
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

    # SSL证书配置
    ssl_certificate      cert/yphtoy.com.pem;
    ssl_certificate_key  cert/yphtoy.com.key;
    ssl_protocols        TLSv1 TLSv1.1 TLSv1.2;
    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  10m;
    ssl_ciphers          HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;

    # 负载均衡配置
    upstream api_upstream {
        server 127.0.0.1:8080 max_fails=3 weight=1;
        server 127.0.0.1:8081 max_fails=3 weight=1;
    }

    # HTTP接口配置
    server {
        listen 80;
        server_name api.test.com;
        return 301 https://$server_name$request_uri;
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

    # HTTPS接口配置
    server {
        listen 443 ssl;
        server_name api.test.com;
        location / {
            root html;
            index  index.html index.htm;
            proxy_pass http://api_upstream;
            proxy_cookie_path /api/ /;
            proxy_set_header Cookie $http_cookie;
        }
    }

    # 管理后台HTTP配置
    server {
        listen 80;
        server_name manage.test.com;
        return 301 https://$server_name/$request_uri;
        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
            root html;
        }
    }

    # 管理后台HTTPS配置
    server {
        listen 443 ssl;
        server_name manage.test.com;
        location / {
            root /home/test/web/dist;
            index /index.html;
            try_files $uri $uri/ /index.html;
            add_header Access-Control-Allow-Origin $http_origin;
            add_header Access-Control-Allow-Credentials 'true';
            add_header Access-Control-Allow-Methods 'GET,POST,DELETE,PUT,OPTIONS';
            add_header Access-Control-Allow-Headers $http_access_control_request_headers;
            if ($request_method = 'OPTIONS') {
                return 204;
            }
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host  $http_host;
            proxy_set_header X-Nginx-Proxy true;
        }
    }
}

Nginx配置文件结构

  1. 全局块
  • worker_processes:工作进程数
  1. events块
  • worker_connections:每个工作进程的最大连接数
  1. http块
  • http全局块
  • server块
  • listen:监听端口
  • server_name:服务器名称
  • location:请求路径配置

修改Nginx监听端口

  1. 修改配置文件

    vim nginx.conf
    
  2. 重载配置

    ./sbin/nginx -s reload
    
  3. 检查端口监听

    netstat -anp | grep 10000
    
  4. 访问新端口
    在浏览器中输入http://localhost:10000/

配置多个server

  1. 复制server配置
  2. 修改端口
  3. 上传配置文件
  4. 重载配置
  5. 访问新端口
  6. 恢复默认端口
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号