来拿-Nginx常用代理配置

193 阅读2分钟

前言

打算做一个拿来主义文章系列,文章简单粗暴,没有原理分析,只有怎装、怎么用和怎么配等等,保证在指定的环境下配置可用。本人不提倡纯粹的拿来主义,希望兄弟们拿了之后可以深入的去研究一下其中的好赖和机制原理。废话不多说,开篇Nginx常用代理配置。

环境

  • 系统:腾讯云服务器 CentOS 7.9 64位(内核版本:3.10.0-1160.59.1.el7.x86_64)
  • Nginx:1.23.1,安装SSH和Stream模块
  • 读者:有一定的Nginx安装使用基础

反向代理

你希望通过域名server_name www.test.com 和访问服务器中部署在其他端口上运行的服务(proxy_pass http://127.0.0.1:8080)使用此配置

proxy_pass 也可以是服务器能访问的任何地址的服务,例如说:www.baidu.com

server {
    server_name  www.test.com;
    listen       80;

    server_name_in_redirect off;
    proxy_set_header Host $host:$server_port;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header REMOTE-HOST $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 

    location / {
	      proxy_pass http://127.0.0.1:8080;
	      index  index.html index.htm index.jsp;
    }
}

SSL

在反向代理的基础上还要支持https访问,使用此配置。Nginx需要使用SSL模块编译安装,配置前需要获得证书,并上传到服务器目录,例如:/usr/local/nginx/cert,对应配置:ssl_certificate /usr/local/nginx/cert/xxxx.pem;ssl_certificate_key /usr/local/nginx/cert/xxxx.key;

server {
    server_name  www.test.com;
    listen       80;
   
    listen       443 ssl;
    ssl_protocols TLSv1.2 TLSv1.1 TLSv1;
    ssl_certificate /usr/local/nginx/cert/xxxx.pem;
    ssl_certificate_key /usr/local/nginx/cert/xxxx.key;
    ssl_prefer_server_ciphers on;
    ssl_ciphers HIGH:!aNULL:!MD5;

    server_name_in_redirect off;
    proxy_set_header Host $host:$server_port;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header REMOTE-HOST $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 

    location / {
	      proxy_pass http://127.0.0.1:8080;
	      index  index.html index.htm index.jsp;
    }
}

静态代理

快速创建一个静态网站就用此配置,页面上传到指定的服务器目录root /home/mywebsite;即可开启访问.

server {
    server_name  www.test.com;
    listen       80;

    location / {
        # 静态文件目录
        root /home/mywebsite;
        index index.html index.htm;
    }
}

文件下载

快速搭建一个下载服务使用此配置,提供下载的文件上传到指定的服务器目录alias /home/download; 即可

server {
    server_name  www.test.com;
    listen       80;
    location /download {
        # 下载文件目录
        alias   /home/download; 
        add_header Content-Disposition attachment;
        add_header Content-Type application/octet-stream;
        sendfile on;   # 开启高效文件传输模式
        autoindex on;  # 开启目录文件列表
        autoindex_exact_size on;  # 显示出文件的确切大小,单位是bytes
        autoindex_localtime on;  # 显示的文件时间为文件的服务器时间
        charset utf-8,gbk;  # 避免中文乱码
    }
}

代理MySQL

如果需要代理MySQL请求,使用此配置。Nginx需要使用Stream模块编译安装。可以通过服务器域名或者IP访问服务器指定端口listen 63306;来访问指定的MySQL服务server my.test.com:3306;,配置完后记得到防火墙里面放开服务器的端口。

注意:stream与http是同一层级的配置

stream {        
    upstream mysql {
        server my.test.com:3306;
    }
    server {
        listen 63306;
        proxy_connect_timeout 10s;
        proxy_timeout 30s;
        proxy_pass mysql;
    }
}