Linux配置Nginx图片服务器
一. 设置nginx.conf配置文件
查找配置文件:
find / -name nginx.conf
更改配置文件
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;
}
}
- 访问: 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、开启防火墙 |
配置Https服务器
进入到nginx.conf的配置文件中
增加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;
}
}加强 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;重启配置文件
查看nginx正在运行的进程pid
ps -ef | grep nginx
杀死正在运行的进程
kill -9 `pid`
运行配置文件
nginx -c /etc/nginx/nginx.conf综合配置
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端口 |
添加完后,需要重载生效:
#重载生效添加的端口 |