Linux配置Nginx图片服务器

一. 设置nginx.conf配置文件

  1. 查找配置文件:

    find / -name nginx.conf

  1. 更改配置文件

    vim /etc/nginx/nginx.conf
    server {
    listen 80 default_server;
    listen [::]:80 default_server;
    server_name _;
    root /usr/share/nginx/html;

    # Load configuration files for the default server block.
    include /etc/nginx/default.d/*.conf;

    location / {
    }

    error_page 404 /404.html;
    location = /404.html {
    }

    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
    }

    # 配置图片的存储类型
    location ~ .*\.(gif|jpg|jpeg|png|jfif)$ {
    # 图片存放位置
    root /root/project/yun/image;
    autoindex on;
    }

    }
  1. 访问: https://ip/图片名称

二. 可能遇到的错误

访问nginx出现403 forbidden

1. 原因

nginx是由root用户启动,查看进程发现worker进程是nobody用户,nginx下的静态文件worker进程没有访问权限。

在这里插入图片描述

2. 解决

修改nginx配置文件nginx.conf,将user配置修改与启动用户一致。

在这里插入图片描述

执行命令使nginx重新加载配置文件

./sbin/nginx -s reload

再查看nginx进程,worker进程的用户被修改成了root用户。此时重新访问根目录不再报403 forbidden的错误,可以正常访问。

在这里插入图片描述

未开放端口

1、开启防火墙 
    systemctl start firewalld

2、开放指定端口
      firewall-cmd --zone=public --add-port=80/tcp --permanent
 命令含义:
--zone #作用域
--add-port=80/tcp  #添加端口,格式为:端口/通讯协议
--permanent  #永久生效,没有此参数重启后失效

3、重启防火墙
      firewall-cmd --reload

4、查看端口号
netstat -ntlp   //查看当前所有tcp端口·

netstat -ntulp |grep 80   //查看所有80端口使用情况·

查看防火墙状态:
systemctl status firewalld

关闭防火墙:
systemctl stop firewalld

配置Https服务器

  1. 进入到nginx.conf的配置文件中

  2. 增加https配置(nginx内置了https服务, 只需要将注释去掉并进行个人配置就好)

    # Settings for a TLS enabled server.

    server {
    listen 443 ssl http2 default_server;
    listen [::]:443 ssl http2 default_server;
    server_name _;
    root /usr/share/nginx/html;

    # HSTS策略
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
    #优先采取服务器算法
    ssl_prefer_server_ciphers on;
    #使用DH文件
    ssl_dhparam /etc/ssl/certs/dhparam.pem;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    #定义算法
    #减少点击劫持
    add_header X-Frame-Options DENY;
    #禁止服务器自动解析资源类型
    add_header X-Content-Type-Options nosniff;
    #防XSS攻擊
    add_header X-Xss-Protection 1;

    ssl_certificate "/root/project/yun/Nginx/1_yunservice.ltd_bundle.crt";
    ssl_certificate_key "/root/project/yun/Nginx/2_yunservice.ltd.key";
    ssl_session_cache shared:SSL:1m;
    ssl_session_timeout 10m;
    #ssl_ciphers HIGH:!aNULL:!MD5;
    #ssl_prefer_server_ciphers on;

    # Load configuration files for the default server block.
    include /etc/nginx/default.d/*.conf;

    location / {
    }

    error_page 404 /404.html;
    location = /404.html {
    }

    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
    }

    # 配置个人的图片访问地址
    location ~ .*\.(gif|jpg|jpeg|png|jfif)$ {
    root /root/project/yun/image;
    autoindex on;
    }

    }
  3. 加强 HTTPS 安全性

    HTTPS 基础配置采取的默认加密算法是 SHA-1,这个算法非常脆弱,安全性在逐年降低,在 2014 年的时候, Google 官方博客就宣布在 Chrome 浏览器中逐渐降低 SHA-1 证书的安全指示,会从 2015 年起使用 SHA-2 签名的证书,可参阅 Rabbit_Run 在 2014 年发表的文章:《为什么Google急着杀死加密算法SHA-1》

    为此,主流的 HTTPS 配置方案应该避免 SHA-1,可以使用 迪菲-赫尔曼密钥交换(D-H,Diffie–Hellman key exchange)方案。

    首先在目录 /etc/ssl/certs 运行以下代码生成 dhparam.pem 文件:

    cd /etc/ssl/certs

    openssl dhparam -out dhparam.pem 2048

    然后加入 Nginx 配置:

    #优先采取服务器算法
    ssl_prefer_server_ciphers on;
    #使用DH文件
    ssl_dhparam /etc/ssl/certs/dhparam.pem;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    #定义算法
    ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !RC4";

    如果服务器夠強大,可以使用更为复杂的 4096 位进行加密。

    一般情況下还应该加上以下几个增强安全性的命令:

    #减少点击劫持
    add_header X-Frame-Options DENY;
    #禁止服务器自动解析资源类型
    add_header X-Content-Type-Options nosniff;
    #防XSS攻击
    add_header X-Xss-Protection 1;
  4. 重启配置文件

    查看nginx正在运行的进程pid
    ps -ef | grep nginx

    杀死正在运行的进程
    kill -9 `pid`

    运行配置文件
    nginx -c /etc/nginx/nginx.conf
  5. 综合配置

    server {
    listen 443 ssl http2 default_server;
    listen [::]:443 ssl http2 default_server;
    server_name _;
    root /usr/share/nginx/html;
    # HSTS策略
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
    # 优先采取服务器算法
    ssl_prefer_server_ciphers on;
    # 使用DH文件
    ssl_dhparam /etc/ssl/certs/dhparam.pem;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    # 定义算法
    ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !RC4";
    # 减少点击劫持
    add_header X-Frame-Options DENY;
    # 禁止服务器自动解析资源类型
    add_header X-Content-Type-Options nosniff;
    # 防XSS攻擊
    add_header X-Xss-Protection 1;

    ssl_certificate "/root/project/yun/Nginx/1_yunservice.ltd_bundle.crt";
    ssl_certificate_key "/root/project/yun/Nginx/2_yunservice.ltd.key";
    ssl_session_cache shared:SSL:1m;
    ssl_session_timeout 10m;
    #ssl_ciphers HIGH:!aNULL:!MD5;
    #ssl_prefer_server_ciphers on;

    # Load configuration files for the default server block.
    include /etc/nginx/default.d/*.conf;

    location / {
    }

    error_page 404 /404.html;
    location = /404.html {
    }

    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
    }

    location ~ .*\.(gif|jpg|jpeg|png|jfif)$ {
    root /root/project/yun/image;
    autoindex on;
    }


    }

参考文章:

一些错误

外界无法访问Linux服务器上的项目的解决方法及防火墙设置

外界无法访问服务器上的项目,
一是因为服务器防火墙没有设置好,例如你的项目要用到数据库,而数据库对应的端口就需要被开启,否则就无法访问数据库,进而访问项目异常;
二是因为你的云服务器控制台有个安全组规则,你没有开放对应的入网端口规则。
下面开启你所需的所有端口号,相信你的项目就能正常访问了。

在终端内查看一下防火墙是否开启:firewall-cmd --state running 表示已开启防火墙,否则你需要systemctl start firewalld.service来开启。

检查已开放的端口号:firewall-cmd --list-ports,以下是我已开放的端口号列表
在这里插入图片描述
若没有你需要的端口号,则要添加进去:例如添加8080端口

#永久开放8080端口
firewall-cmd --add-port=8080/tcp --permanent

添加完后,需要重载生效:

#重载生效添加的端口
firewall-cmd --reload