nginx 做反向代理

目录

1. 安装 Nginx

安装前置依赖

确保系统有 PCRE(Perl Compatible Regular Expressions)包,以支持 nginx 中的正则表达式。从官方源下载、编译、安装:

# wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.12.tar.bz2
# tar jxvf pcre-8.12.tar.bz2
# cd pcre-8.10
# ./configure --enable-utf8
# make
# make install

创建 nginx 用户及用户组

# useradd www-nginx
# groupadd www
# gpasswd -a www-nginx www

编译安装 Nginx

# wget http://nginx.org/download/nginx-1.0.3.tar.gz
# tar zxvf nginx-1.0.3.tar.gz
# cd nginx-1.0.3
# ./configure \
  --prefix=/usr \
  --sbin-path=/usr/sbin \
  --conf-path=/etc/nginx/nginx.conf \
  --error-log-path=/var/log/nginx/error.log \
  --pid-path=/var/run/nginx/nginx.pid \
  --lock-path=/var/lock/nginx.lock \
  --user=www-nginx \
  --group=www \
  --with-http_ssl_module \
  --with-http_stub_status_module \
  --with-http_flv_module \
  --with-http_gzip_static_module \
  --http-log-path=/var/log/nginx/access.log \
  --http-client-body-temp-path=/var/tmp/nginx/client/ \
  --http-proxy-temp-path=/var/tmp/nginx/proxy/ \
  --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/
# make
# make install

简化编译(常用选项)

# ./configure \
  --user=www-nginx \
  --group=www \
  --prefix=/opt/nginx \
  --with-http_stub_status_module \
  --with-http_ssl_module
# make && make install

编译选项说明

  • --with-http_stub_status_module:启用 nginx status 功能,用于监控 nginx 状态
  • --with-http_ssl_module:启用 SSL/TLS 模块
  • --with-ipv6:支持 IPv6
  • --with-pcre, --with-openssl, --with-zlib 后接的路径应为源代码路径而非安装路径

安装后结构:安装成功后,/opt/nginx 目录下有四个子目录:

  • conf/:配置文件(nginx.conf)
  • html/:默认网页
  • logs/:日志文件
  • sbin/:nginx 可执行文件

启动 nginx:

# sbin/nginx

打开浏览器访问服务器 IP,看到”Welcome to nginx!”表示安装成功。

2. 使用 OpenSSL 生成证书

创建证书存放目录:

# mkdir /opt/nginx/sslkey
# cd /opt/nginx/sslkey

生成 RSA 密钥

# openssl genrsa -out key.pem 2048

生成证书请求

# openssl req -new -key key.pem -out cert.csr

会提示输入省份、城市、域名等信息。将此文件提交给数字证书颁发机构(CA)获取正式证书。

自签名测试证书(不向 CA 申请):

# openssl req -new -x509 -nodes -out server.crt -keyout server.key

3. Nginx 反向代理配置

基本反向代理配置

nginx.conf 中定义 upstream 和服务器块:

upstream payment {
    server 127.0.0.1:8080;
    server 127.0.0.1:8090;
}

# HTTPS 服务器
server {
    listen 443;
    server_name www.openeasy.net;
    
    ssl on;
    ssl_certificate /opt/nginx/sslkey/server.crt;
    ssl_certificate_key /opt/nginx/sslkey/server.key;
    ssl_session_timeout 5m;
    ssl_protocols SSLv2 SSLv3 TLSv1;
    ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
    ssl_prefer_server_ciphers on;
    
    location / {
        proxy_pass http://payment/;
        proxy_redirect off;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_connect_timeout 10s;
        proxy_read_timeout 10s;
    }
}

Upstream 说明

upstream payment { ... } 定义后端服务器池,location 中的 proxy_pass http://payment/; 将请求转发到该池中的服务器。

4. Nginx 管理命令

程序运行参数

Nginx 仅有一个可执行文件,通过命令行参数和系统信号控制:

  • -c FILE:指定配置文件(默认 conf/nginx.conf)
  • -t:测试配置文件语法,重新加载前必用
  • -v:显示版本号
  • -V:显示版本和编译信息

示例:测试配置文件

# sbin/nginx -t -c conf/nginx2.conf

信号控制

通过 kill -SIGNAL PIDkillall -s SIGNAL nginx 控制 nginx:

信号作用
TERM, INT快速关闭,中止当前请求
QUIT关闭前完成所有请求
HUP重新加载配置,启动新工作进程,关闭旧进程(不中断连接)
USR1重新打开日志文件(日志轮转)
USR2平滑升级可执行程序
WINCH从容关闭工作进程

示例:重新加载配置

# kill -HUP `cat logs/nginx.pid`
# 或
# killall -s HUP nginx

当 PID 文件在 logs/nginx.pid 时,可通过 cat 读取当前进程 ID。

#nginx #ssl-tls