通过YUM 安装

Nginx 可以通过 EPEL (Extra Packages for Enterprise Linux) 仓库安装。要先安装 EPEL 仓库。

sudo yum install epel-release -y

安装 Nginx

sudo yum install nginx -y

启动 Nginx 服务:

sudo systemctl start nginx

通过编译安装

通过源码编译安装 Nginx 可以让你更灵活地控制 Nginx 的模块和功能。

1. 安装编译环境和依赖

首先,确保你的系统上安装了必要的编译工具和依赖项:

sudo yum groupinstall "Development Tools" -y
sudo yum install pcre pcre-devel zlib zlib-devel openssl openssl-devel -y

2. 下载 Nginx 源码

访问 Nginx 官网 下载最新稳定版的源码包,或者使用以下命令下载指定版本:

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

下载完成后,解压源码包:

tar -zxvf nginx-1.24.0.tar.gz
cd nginx-1.24.0

3. 配置编译选项

在编译 Nginx 之前,你需要配置 Nginx 的编译选项。你可以通过 ./configure 脚本来设置。

./configure \
    --prefix=/usr/local/nginx \
    --with-http_ssl_module \
    --with-http_v2_module \
    --with-http_gzip_static_module \
    --with-stream \
    --with-http_stub_status_module
  • --prefix=/usr/local/nginx:指定 Nginx 的安装路径。
  • --with-http_ssl_module:启用 SSL 模块。
  • --with-http_v2_module:启用 HTTP/2 支持。
  • --with-http_gzip_static_module:启用 gzip 静态压缩模块。
  • --with-stream:启用 TCP/UDP 流式处理。
  • --with-http_stub_status_module:启用 stub_status 模块,用于获取 Nginx 状态信息。

你可以根据需要添加或删除编译选项。运行 ./configure 后,如果没有错误提示,则可以继续。

4. 编译和安装

配置完成后,运行以下命令进行编译和安装:

make
sudo make install

这个过程可能需要一些时间,具体取决于你的硬件性能。

5. 配置 Nginx

安装完成后,Nginx 的默认配置文件路径为 /usr/local/nginx/conf/nginx.conf。你可以使用文本编辑器进行编辑:

sudo vi /usr/local/nginx/conf/nginx.conf

6. 启动 Nginx

编译安装的 Nginx 不会像通过包管理器安装的那样自动配置服务管理文件,所以你需要手动启动 Nginx:

/usr/local/nginx/sbin/nginx

要停止 Nginx,可以使用以下命令:

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

为了方便在命令行中管理 Nginx,可以将 Nginx 的可执行文件路径添加到系统的环境变量中,这样你就可以直接使用 nginx 命令而不需要输入完整路径。以下是配置 Nginx 环境变量的步骤:

  1. 查看 Nginx 安装路径

首先,确定 Nginx 的安装路径。假设 Nginx 是通过源码编译安装的,并且安装路径为 /usr/local/nginx。

Nginx 可执行文件的路径通常是 /usr/local/nginx/sbin/nginx。

  1. 添加 Nginx 路径到环境变量

你可以将 Nginx 的路径添加到用户的 ~/.bashrc 文件中,或者如果你想让所有用户都能使用这个路径,可以将其添加到全局的 /etc/profile 文件中。

export PATH=$PATH:/usr/local/nginx/sbin

7. 设置系统服务 (可选)

为了方便管理 Nginx,你可以创建一个 systemd 服务文件:

sudo vi /lib/systemd/system/nginx.service

添加以下内容:

[Unit]
Description=The NGINX HTTP and reverse proxy server
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
PIDFile=/usr/local/nginx/logs/nginx.pid
PrivateTmp=true

[Install]
WantedBy=multi-user.target

保存并退出,然后重新加载 systemd 并启用 Nginx:

sudo systemctl daemon-reload
sudo systemctl enable nginx
sudo systemctl start nginx

Nginx 的配置

1. 基本配置

Nginx 的主配置文件通常位于 /etc/nginx/nginx.conf。在这个文件中,你可以配置全局设置,如用户、进程数、日志、以及负载均衡等。配置文件结构

Nginx 配置文件的基本结构如下:

user www-data;
worker_processes auto;

events {
    worker_connections 1024;
}

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

    sendfile on;
    keepalive_timeout 65;

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

这段Nginx配置文件包含了一些全局和HTTP相关的设置。以下是各部分的解释:

该文件是Nginx服务器的配置文件,主要描述了Nginx的工作进程、事件处理、HTTP设置等。具体来说,它设置了工作进程数为自动,每个工作进程可以处理1024个连接。同时,它还包括了MIME类型、默认文件类型、日志格式、访问日志位置、是否开启sendfile、长连接超时时间等设置。此外,还包含了其他Nginx配置文件的路径,如/etc/nginx/conf.d/.conf和/etc/nginx/sites-enabled/。

2. SSL/TLS 配置

server {
  listen 80;
  server_name example.com;
  # 重定向HTTP到HTTPS
  location / {
    return 301 https://$server_name$request_uri;
  }
}

listen 80;: 监听HTTP请求的80端口。
server_name example.com;: 指定处理的服务器域名为example.com。
location / { return 301 https://$server_name$request_uri; }: 任何访问http://example.com的请求都会被永久重定向(301重定向)到https://example.com。其中$server_name表示当前的服务器名,$request_uri表示请求的URI(包括参数)。


server {
  listen 443 ssl ;
  server_name example.com;
  # SSL证书文件路径
  ssl_certificate example/example.com_bundle.crt;
  ssl_certificate_key example/example.com.key;
  ssl_session_timeout 5m;
  
  # 增强SSL安全性配置(可选)
  ssl_protocols TLSv1.2 TLSv1.3;
  #请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。
  ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; 
  ssl_prefer_server_ciphers on;

  client_max_body_size 1024m;

  location / {
    proxy_pass http://example;
    proxy_set_header HOST $host;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $prxy_add_x_forwarded_for;
  }
}
  1. `listen 443 ssl: 监听HTTPS请求443端口,并启用SSL(ssl关键字)。

  2. `server_name example.com: 指定处理的服务器域名为eample.com。

  3. `ssl_certificate example/example.com_bundle.crt: 定SSL证书文件的路径。

  4. `ssl_certificate_key example/example.com.key: 定SSL证书私钥文件的路径。

  5. `ssl_sesson_timeout 5m: 设置SSL会话的超时时间为5分钟。

  6. `client_max_body_size 1024m: 设置客户端请求体的最大大小为1024MB,适用于需要上大文件的情况。

  7. location / { … } 处理对根路径/的请求。

  8. `proxy_pass http://example: 将所有匹配的请求代理后端服务器http://example。

  9. `proxy_set_eader HOST $host: 将请求中的Host头设置为客户端请求的主机名。

  10. `proxy_set_header X-Forwarded-Proto $scheme: 设置X-ForwardedProto头,标识客户端使用的协议(http或https)。

  11. `proxy_set_header X-Real-IP $remote_adr: 设置X-Real-IP头,将客户端的真实IP地址传递给后端服务器。

  12. `proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for: 设置X-Forwarded-For头,包含所有代理服务器和客户端的IP地址链。

3. 优化Nginx性能

Nginx默认配置已足够支持大多数网站,但在处理大量并发请求时,你可以通过以下方式进一步优化性能:

//增加 worker_processes
worker_processes auto;

//增加 worker_connections
events {
    worker_connections 2048;
}
//启用 gzip
http {
    gzip on;
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
}

4. 安全配置

//隐藏版本号

server_tokens off;

//禁止访问隐私文件
location ~ /\.ht {
    deny all;
}

每次修改配置文件后,建议使用以下命令检查配置的语法是否正确:

sudo nginx -t