Nginx安装配置

参考:菜鸟Nginx 安装配置

一、安装编译工具及库文件

yum -y install make zlib zlib-devel gcc-c++ libtool  openssl openssl-devel

二、安装PCRE

  • PCRE 作用是让 Nginx 支持 Rewrite 功能。
  1. 下载并解压PCRE安装包,PCRE下载地址
cd /usr/local/src/

wget https://ftp.pcre.org/pub/pcre/pcre-8.45.tar.gz

tar zxvf pcre-8.45.tar.gz
  1. 编译安装
cd pcre-8.45

./configure                         # --help参数可以查看可选配置

make && make install

pcre-config --version

三、安装Nginx

  1. 下载并解压Nginx,Nginx官网下载地址,选择稳定版(Stable version)下载
cd /usr/local/src/

wget http://nginx.org/download/nginx-1.20.2.tar.gz

tar zxvf nginx-1.20.2.tar.gz
  1. 编译安装
  • 关于configure命令参数说明:http://nginx.org/en/docs/configure.html
cd nginx-1.20.2

# --help参数可以查看可选配置
./configure \ 
--prefix=/usr/local/nginx \
--with-pcre=/usr/local/src/pcre-8.45 \
--with-http_gzip_static_module \
--with-http_stub_status_module \
--with-http_ssl_module \
--with-http_v2_module \
--with-file-aio \
--with-http_realip_module \
--http-client-body-temp-path=/var/tmp/nginx/client \
--http-proxy-temp-path=/var/tmp/nginx/proxy \
--http-fastcgi-temp-path=/var/tmp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/tmp/nginx/uwsgi \
--http-scgi-temp-path=/var/tmp/nginx/scgi

# 执行上面命令需要在/var/tmp目录下建文件夹

make && make install

/usr/local/nginx/sbin/nginx -v

四、Nginx基本配置

  1. 创建 Nginx 运行使用的用户 www
groupadd www 

useradd -g www www
  1. 配置nginx.conf,将/usr/local/nginx/conf/nginx.conf替换为以下内容
user  www www;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
error_log /usr/local/nginx/logs/nginx_error.log crit;

pid        /usr/local/nginx/nginx.pid;

#Specifies the value for maximum file descriptors that can be opened by this process.
worker_rlimit_nofile 65535;
events {
    use epoll;
    worker_connections  65535;
}


http {

    # 自定义固定密钥鉴权:首先使用map定义一个变量,该变量的值取决于token的值
    map $http_token $is_valid_token {
        default          0; # 默认值设置为0,表示无效或未匹配
        123456           1;  # 当token值为123456时,设置变量为1
    }

    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/access.log  main;

    server_names_hash_bucket_size 128;
    client_header_buffer_size 32k;
    large_client_header_buffers 4 32k;
    client_max_body_size 8m;

    sendfile        on;
    tcp_nopush     on;

    server_tokens off; #隐藏Nginx版本号

    #keepalive_timeout  0;
    keepalive_timeout  65;
    tcp_nodelay on;
    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;

    gzip on; 
    gzip_min_length 1k;
    gzip_buffers 4 16k;
    gzip_http_version 1.0;
    gzip_comp_level 2;
    gzip_types text/plain application/x-javascript text/css application/xml;
    gzip_vary on;

    server {
        listen       80;
	    server_name  localhost;
         #location / {
         #    root html;
         #    index index.html index.htm;
         #}
        return 500
    }

    # 定义一个upstream,地址是需要被代理的IP:port
    upstream flink_local_server{ 
        server 127.0.0.1:8081 max_fails=3 fail_timeout=10s weight=10; 
    }

    # #HTTPS server
    # 在 `/usr/local/nginx/conf` 目录下,创建`cert`目录,并将下载的证书文件(*.pem)和密钥文件(*.key)放到`cert`目录下
    server {
        listen       443 ssl;              #SSL协议访问端口号为443。此处如未添加ssl,可能会造成Nginx无法启动。
        server_name  code.dayup.fun;          #将localhost修改为您证书绑定的域名,例如:www.example.com。
        index index.html index.htm index.php;
        root /usr/local/nginx/html;#站点目录

        ssl_certificate      cert/code.dayup.fun.pem;   #将domain name.pem替换成您证书的文件名。 
        ssl_certificate_key  cert/code.dayup.fun.key;   #将domain name.key替换成您证书的密钥文件名。
        #ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;  #使用此加密套件。
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;   #使用该协议进行配置。
        ssl_prefer_server_ciphers  on;



        location /flink/ {                            #末尾加斜杠
            # 使用if指令检查变量值
            #if ($is_valid_token = 0) {
            #    return 404; # 如果token无效,返回403禁止访问
            #}
            proxy_pass  http://flink_local_server/;    #末尾斜杠是关键,用于路径替换‌:proxy_pass末尾的斜杠/会‌自动去除请求路径中的/flink前缀
            proxy_set_header Host $http_host;
            proxy_set_header X-Real-IP $remote_addr;
            #proxy_set_header X-Forwarded-For $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_set_header Upgrade $http_upgrade;
        }
    }
}
  1. 检查配置文件nginx.conf的正确性命令:
/usr/local/nginx/sbin/nginx -t
  1. 启动Nginx
/usr/local/nginx/sbin/nginx
  1. 其他命令
/usr/local/nginx/sbin/nginx -s reload            # 重新载入配置文件
/usr/local/nginx/sbin/nginx -s reopen            # 重启 Nginx
/usr/local/nginx/sbin/nginx -s stop              # 停止 Nginx
  1. Red Hat NGINX Init Script
  • Save this file as /etc/init.d/nginx

五、Nginx配置ssl证书

  1. 购买免费个人型SSL证书

  2. 在SSL证书服务页,下载Nginx证书压缩包文件,压缩包内容如下

  • 证书文件:以.pem为后缀或文件类型。
  • 密钥文件:以.key为后缀或文件类型。
  1. 在 /usr/local/nginx/conf 目录下,创建cert目录,并将下载的证书文件和密钥文件放到cert目录下

  2. 在nginx.conf文件,http括号中添加这一段虚拟主机配置,并按注释提示修改

    #HTTPS server
    server {
        listen       443 ssl;              #SSL协议访问端口号为443。此处如未添加ssl,可能会造成Nginx无法启动。
        server_name  domain.name;          #将localhost修改为您证书绑定的域名,例如:www.example.com。
        index index.html index.htm index.php;
        root /usr/local/nginx/html;#站点目录

        ssl_certificate      cert/domain.name.pem;   #将domain name.pem替换成您证书的文件名。
        ssl_certificate_key  cert/domain.name.key;   #将domain name.key替换成您证书的密钥文件名。

        #ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;

        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;  #使用此加密套件。
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;   #使用该协议进行配置。
        ssl_prefer_server_ciphers  on;

        location / {
            root   html;
            index  index.html index.htm;
        }
    }
  1. 保存nginx.conf文件,并重新载入配置文件
/usr/local/nginx/sbin/nginx -s reload
  1. 设置HTTP请求自动跳转HTTPS。
    在需要跳转的HTTP站点下添加以下rewrite语句,实现HTTP访问自动跳转到HTTPS页面。
server {
    listen 80;
    server_name localhost;           #将localhost修改为您证书绑定的域名,例如:www.example.com。
    rewrite ^(.*)$ https://$host$1 permanent;         #将所有http请求通过rewrite重定向到https。
    location / {
        index index.html index.htm;
    }
}
  1. 阿里云官方教程

六、Nginx代理保留请求真实ip

  • nginx.conf 修改location
    location / {
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        proxy_pass http://127.0.0.1:8080;
    }
  • nginx修改默认页面
user  www www;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
error_log /usr/local/nginx/logs/nginx_error.log crit;

pid        /usr/local/nginx/nginx.pid;

#Specifies the value for maximum file descriptors that can be opened by this process.
worker_rlimit_nofile 65535;
events {
    use epoll;
    worker_connections  65535;
}


http {
    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/access.log  main;

    server_names_hash_bucket_size 128;
    client_header_buffer_size 32k;
    large_client_header_buffers 4 32k;
    client_max_body_size 8m;

    sendfile        on;
    tcp_nopush     on;

    server_tokens off; #隐藏Nginx版本号

    #keepalive_timeout  0;
    keepalive_timeout  65;
    tcp_nodelay on;
    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;

    gzip on; 
    gzip_min_length 1k;
    gzip_buffers 4 16k;
    gzip_http_version 1.0;
    gzip_comp_level 2;
    gzip_types text/plain application/x-javascript text/css application/xml;
    gzip_vary on;

    server {
        listen       80;
        return 500
    }

    server {
        listen       80;
        server_name  pan.dayup.fun;
        location / {
            proxy_pass  http://127.0.0.1:9001;
            proxy_set_header Host $http_host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }

}
  • 给nginx添加模块 nginx-websocket-module
client_max_body_size 200m;
    map $http_upgrade $connection_upgrade {
            default upgrade;
            ''      close;
    }
    server {
        listen       80;
        server_name  oss.dayup.fun;
        ##
        # Connection header for WebSocket reverse proxy
        ##

        location / {
            proxy_pass  http://127.0.0.1:9001;
            proxy_set_header Host $http_host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection $connection_upgrade;
        }
        ; location /ws {
        ;     proxy_pass http://127.0.0.1:9001/ws/;
        ;     proxy_set_header Host $http_host;
        ;     proxy_set_header X-Real-IP $remote_addr;
        ;     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        ;     proxy_set_header X-Forwarded-Proto $scheme;
        ;     proxy_set_header Upgrade $http_upgrade;
        ;     proxy_set_header Connection $connection_upgrade;
        ; }
    }


####https://min.io/docs/minio/linux/integrations/setup-nginx-proxy-with-minio.html
upstream minio {
   least_conn;
   server minio-01.internal-domain.com;
   server minio-02.internal-domain.com;
   server minio-03.internal-domain.com;
   server minio-04.internal-domain.com;
}

server {
   listen       80;
   listen  [::]:80;
   server_name  minio.example.net;

   # Allow special characters in headers
   ignore_invalid_headers off;
   # Allow any size file to be uploaded.
   # Set to a value such as 1000m; to restrict file size to a specific value
   client_max_body_size 0;
   # Disable buffering
   proxy_buffering off;
   proxy_request_buffering off;

   location / {
      proxy_set_header Host $http_host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto $scheme;

      proxy_connect_timeout 300;
      # Default is HTTP/1, keepalive is only enabled in HTTP/1.1
      proxy_http_version 1.1;
      proxy_set_header Connection "";
      chunked_transfer_encoding off;

      proxy_pass https://minio:9000/; # This uses the upstream directive definition to load balance
   }

   location /minio {
      proxy_set_header Host $http_host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto $scheme;
      proxy_set_header X-NginX-Proxy true;

      # This is necessary to pass the correct IP to be hashed
      real_ip_header X-Real-IP;

      proxy_connect_timeout 300;

      # To support websockets in MinIO versions released after January 2023
      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection "upgrade";

      chunked_transfer_encoding off;

      proxy_pass https://minio:9001/; # This uses the upstream directive definition to load balance and assumes a static Console port of 9001
   }
}
← 返回技术