Linux下Nginx配置SSL以及301重定向

2023-10-26 16:18:18 浏览数 (2)

SSL配置

Nginx配置文件,位置/etc/nginx/sites-enabled下的default文件

主要分为2个server块

第一个server块监听80端口,访问的协议是http

第二个server块是443端口,访问的协议是https

要添加SSL证书,主要是对第二个server块进行操作修改,

配置文件已加上注释如下。

代码语言:text复制
# 第一个 server 块,用于将 HTTP 请求重定向到 HTTPS
server {
    listen 80 default_server;  # 监听 HTTP 端口 80
    listen [::]:80 default_server;
    server_name www.XXXX.com.tw;  # 你的域名

    # Redirect HTTP to HTTPS
    return 301 https://$host$request_uri;  # 所有 HTTP 请求重定向到 HTTPS
}

# 第二个 server 块,启用 HTTPS,并设置 SSL 证书和密钥
server {
    listen 443 ssl;  # 监听 HTTPS 端口 443
    listen [::]:443 ssl;
    server_name www.XXXX.com.tw;  # 你的域名

    ssl_certificate /etc/nginx/ssl/your_domain.crt;  # SSL 证书文件的路径
    ssl_certificate_key /etc/nginx/ssl/your_domain.key;  # SSL 证书密钥的路径
    ssl_trusted_certificate /var/www/ssl/ROOT.crt;  #SSL root根证书路径
    ssl_protocols TLSv1.2 TLSv1.3;  # 支持的 SSL 协议版本
    ssl_ciphers 'TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384';  # SSL 加密套件
    ssl_prefer_server_ciphers off;  # 关闭优先使用服务器的加密套件
    ssl_session_cache shared:SSL:10m;  # 缓存 SSL 会话
    ssl_session_tickets off;  # 禁用 SSL 会话票据

    root /www/wwwroot/www.morglory.com/public;  # 你的站点根目录
    index index.php index.html index.htm index.nginx-debian.html;  # 默认文档索引

    # 处理站点根目录下的请求
    location / {
        try_files $uri $uri/ /index.php?$query_string;  # 尝试找到文件,否则重定向到 index.php
    }

    # 处理特定的 /contact.php 请求
    location = /contact.php {
        try_files $uri $uri/ /index.php?$query_string;  # 尝试找到文件,否则重定向到 index.php
    }

    # 处理 PHP 脚本请求
    location ~ .php$ {
        include snippets/fastcgi-php.conf;  # 包含 FastCGI 配置
        fastcgi_param PHP_ADMIN_VALUE "open_basedir=/www/wwwroot/www.XXXX.com/:/tmp/";  # PHP 配置
        fastcgi_pass unix:/tmp/php-cgi-82.sock;  # 连接到 PHP-FPM
    }
}

我们需要更改第二个server块的内容

server_name:你的域名

ssl_certificate:证书后缀为crt文件路径

ssl_certificate_key:证书后缀为key文件路径

ssl_trusted_certificate:证书根证书路径

root:网站主页存在的位置,

open_basedir:注意需要修改到你正确的配置,也可以不用。

配置完成后运行如下命令进行配置文件生效:注意(我的是Ubuntu),其他Linux可能不同

代码语言:text复制
sudo nginx -s reload
301重定向

我们要对某些网址做301跳转,跳转的是https地址,所以我们要在第二个server块进行添加301跳转

添加内容如下:

代码语言:text复制
location /product09-5.html {
        rewrite ^/product09-5.html$ https://www.baidu.com permanent;
    }

替换例子:

如要替换为product.html重定向到地址https://www.baidu.com

需要更改三个位置,

代码语言:text复制
location /product.html {
        rewrite ^/product.html$ https://www.baidu.com permanent;
    }

全部配置文件:

代码语言:text复制
# 第一个 server 块,用于将 HTTP 请求重定向到 HTTPS
server {
    listen 80 default_server;  # 监听 HTTP 端口 80
    listen [::]:80 default_server;
    server_name www.XXXX.com.tw;  # 你的域名

    # Redirect HTTP to HTTPS
    return 301 https://$host$request_uri;  # 所有 HTTP 请求重定向到 HTTPS
}

# 第二个 server 块,启用 HTTPS,并设置 SSL 证书和密钥
server {
    listen 443 ssl;  # 监听 HTTPS 端口 443
    listen [::]:443 ssl;
    server_name www.XXXX.com.tw;  # 你的域名

    ssl_certificate /etc/nginx/ssl/your_domain.crt;  # SSL 证书文件的路径
    ssl_certificate_key /etc/nginx/ssl/your_domain.key;  # SSL 证书密钥的路径
    ssl_protocols TLSv1.2 TLSv1.3;  # 支持的 SSL 协议版本
    ssl_ciphers 'TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384';  # SSL 加密套件
    ssl_prefer_server_ciphers off;  # 关闭优先使用服务器的加密套件
    ssl_session_cache shared:SSL:10m;  # 缓存 SSL 会话
    ssl_session_tickets off;  # 禁用 SSL 会话票据

    root /www/wwwroot/www.morglory.com/public;  # 你的站点根目录
    index index.php index.html index.htm index.nginx-debian.html;  # 默认文档索引

    # 处理站点根目录下的请求
    location / {
        try_files $uri $uri/ /index.php?$query_string;  # 尝试找到文件,否则重定向到 index.php
    }

    # 处理特定的 /contact.php 请求
    location = /contact.php {
        try_files $uri $uri/ /index.php?$query_string;  # 尝试找到文件,否则重定向到 index.php
    }

    # 处理 PHP 脚本请求
    location ~ .php$ {
        include snippets/fastcgi-php.conf;  # 包含 FastCGI 配置
        fastcgi_param PHP_ADMIN_VALUE "open_basedir=/www/wwwroot/www.XXXX.com/:/tmp/";  # PHP 配置
        fastcgi_pass unix:/tmp/php-cgi-82.sock;  # 连接到 PHP-FPM
    }
    location /product.html {
        rewrite ^/product.html$ https://www.baidu.com permanent;
    }
}

记得运行命令,让配置生效

代码语言:text复制
sudo nginx -s reload

0 人点赞