Nginx 初学者实践

Nginx 初学者实践

1. Nginx 配置编排

对于 Nginx初学者(比如我)来说,习惯了在 nginx.conf 的文件中直接写配置文件。这样会让所有的配置都混在一起,非常不好管理

Nginx推荐的配置编排方式

在ubuntu中装好 Nginx 之后,目录结构如下

image-20210326110641076

推荐配置编排方式
1. nginx.conf

这个 Nginx 的默认配置文件。建议用来保存全局的配置。

例如:全局限制下载文件大小设置

2. sites-available

这是一个配置目录。建议用来保存对应域名的配置。

例如,我有一台机器和3个域名(分别是mkii.com, dev.mkii.com, test.mkii.com)。在 sites-available目录下新建3个文件:

mkii.com:用来写关于 mkii.com 这个域名的配置

dev.mkii.com:用来写关于 dev.mkii.com 这个域名的配置

test.mkii.com:用来写关于 test.mkii.com 这个域名的配置

注意 sites-available 目录中文件默认是不生效的,sites-enabled 目录中的文件才会生效

3. sites-enabled

这是一个配置目录。建议用来保存是否开启 sites-available 目录中的配置。通过link的方式决定配置是否生效。

例如:开启dev.mkii.com的配置

cd /etc/nginx/sites-enabled
# 在sites-enabled目录中生成一个文件dev.mkii.com并link到sites-available目录下的dev.mkii.com
link ../sites-available/dev.mkii.com dev.mkii.com

2. 常用配置

2.1 将 80 的请求全部转到 443 端口

server {
    listen 80;
    server_name mkii.com;
    rewrite ^(.*)$ https://${server_name}$1 permanent;
}

2.2 配置网站证书

server {
    listen 443 ssl http2;
    server_name mkii.com;
    keepalive_timeout 60;
    keepalive_requests 100;
    ssl_certificate /etc/nginx/ssl/mkii.com.cert.pem;
    ssl_certificate_key /etc/nginx/ssl/mkii.com.key.pem;
    ssl_session_timeout 30m;
    ssl_session_cache shared:SSL:10m;
    ssl_prefer_server_ciphers on;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!MD5:!ADH:!RC4:!DH:!DHE;
    gzip on;
    gzip_comp_level 5;
    gzip_types text/plain application/javascript application/x-javascript text/javascript text/css application/xml image/jpeg image/gif image/png;

    # 我的网站目录
    location / {
        root /opt/site;
        index index.html;
    }

    # 我的网站文件目录。访问https://mkii.com/files/xxx 会到/opt/site-files目录下找文件
    location /files/ {
        root /opt/site-files;
    }
}

申请证书的时候有2种方式验证服务器:

  • 通过dns验证
  • 通过在服务器上放一个文件来验证

关于文件验证可以看我的另一篇文章:域名的https证书申请并自动续期

这个的配置主要是为了第2种方式验证,我不想把验证文件放在我的网站的目录里边,所以我使用 Nginx 切换验证文件的位置。

访问 http://mkii.com/.well-known/acme-challenge/agww2B-ty–atKNEn_2tfTB32US0mNfoeahd3DpA8F4,会去到/opt/ssl-auth找.well-known/acme-challenge/agww2B-ty–atKNEn_2tfTB32US0mNfoeahd3DpA8F4

# ^~表示匹配以/.well-known/acme-challenge/开头的请求。用于自动生成证书
location ^~ /.well-known/acme-challenge/ {
    root /opt/ssl-auth/;
}

2.3 配置 / 和 /admin/ 的请求走都走/admin/

我的网站本来发布在 https://dev.mkii.com/admin/,现在我想用一个域名做统一的入口。也就是说直接访问我的域名 https://dev.mkii.com 就能进入我的网站

location / {
    proxy_pass http://127.0.0.1:8080/admin/;
}
location /userportal/ {
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $remote_addr;
    proxy_pass http://127.0.0.1:8080/admin/;
}

这个有个细节:proxy_pass 后面是否加 / 会有比较大的不同。可以参考这篇文章:nginx 之 proxy_pass详解

2.4 配置端口证书

server {
    listen 443 ssl;
    server_name mkii.com:8080;
    ssl_certificate /etc/nginx/ssl/mkii.com.cert.pem;
    ssl_certificate_key /etc/nginx/ssl/mkii.com.key.pem;
    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
    ssl_prefer_server_ciphers on;
    
    # 这里把请求透传到了内部
    location / {
        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;
        proxy_pass http://127.0.0.1:8088/;
        proxy_redirect off;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值