nginx配置指引.md
安装EPEL仓库
rpm -ivh https://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm
CentOS6
rpm -ivh https://mirrors.aliyun.com/epel/epel-release-latest-6.noarch.rpm
安装Nginx
yum -y install nginx
配置nginx
创建一个站点的根目录
我打算使用nginx做文件共享服务mkdir /usr/share/nginx/files
创建测试文件
touch /usr/share/nginx/files/test.txt
删除默认配置
mv /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.bak
创建一个虚拟主机,用于文件共享
vi /etc/nginx/conf.d/file_server.conf
server {
listen 80;
server_name files.example.com;
charset utf-8;
root /usr/share/nginx/files;
location / {
autoindex on;
autoindex_exact_size on;
autoindex_localtime on;
}
}
解决防火墙问题
https采用TCP443端口,随后会有配置指引,强烈建议加密,即使加密对传输速度有影响
firewalld:
firewall-cmd --add-service=http --permanent firewall-cmd --add-service=https --permanent firewall-cmd --reload
iptables:
iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp --dport 443 -j ACCEPT service iptables save service iptables reload
重打SELinux文件标签
restorecon -RvF /usr/share/nginx/
启动nginx服务
先测试一下看看有没有报错nginx -t
CentOS6:service nginx start
CentOS7:systemctl start nginx.service
在其它电脑上浏览器测试
假设你服务器的IP为192.168.1.100,你个人电脑的IP随意,可以访问服务器即可。 使用域名访问,需要在测试电脑上修改hosts文件,Windows的hosts文件位置C:\Windows\System32\drivers\etc\hosts
用记事本打开增加以下内容,如果权限问题,把文件复制到桌面修改完后再放回原位
192.168.1.100 files.example.com
在浏览器上打开
http://files.example.com
应该可以看到test.txt这个文件
设置密码
搭建文件服务器有时候不想让别人任意访问,可以用到nginx自带的认证模块。 使用这两个字段auth_basic
表示的输入密码时的提示语auth_basic_user_file
则显示认证时的用户密码文件存放路径
留意auth_basic两行
server { client_max_body_size 4G; listen 80; server_name files.example.com; root /usr/share/nginx/files; location / { auth_basic "Restricted"; auth_basic_user_file /etc/nginx/pass_file; autoindex on; autoindex_exact_size on; autoindex_localtime on; } }
生成用户密码
htpasswd -c -d /etc/nginx/pass_file user1
按指引设置密码
如果提示没有htpasswd
这个命令,安装相应的包yum -y install httpd-tools
先测试一下,看看有没有报错nginx -t
重载配置
nginx -s reload
如果使用reload不生效就要使用restart
CentOS6:service nginx restart
CentOS7:systemctl restart nginx.service
测试
用浏览器测试一下,看看有没有密码要求
再创建一个网站
使用
/usr/share/nginx/html/index.html
作示范,你也可以自行修改页面内容
vi /etc/nginx/conf.d/www.conf
#The www server server { listen 80; listen [::]:80; server_name www.example.com; root /usr/share/nginx/html; }
先测试一下,看看有没有报错nginx -t
重载配置
nginx -s reload
如果使用reload不生效就要使用restart
CentOS6:service nginx restart
CentOS7:systemctl restart nginx.service
测试
在浏览器上分别打开
http://www.example.com
http://files.example.com
虚拟主机配置文件*.conf的其它参数
#指定进行用户 #user nobody; #指定进程数 worker_processes 1; #指定日志种类 error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #限制连接数 events { worker_connections 1024; } http { #限制客户端上传文件大小 client_max_body_size 20m; #访问记录 access_log logs/access.log main; #允许向服务器发送文件 sendfile on; }
网页中的图片处理
假设 /usr/share/nginx/www/images这个目录专门放图片,用于嵌入到网页里,
比如访问http://www.example.com/images/1.jpg,就可以看到一张图片,但不允许客户端一次性查看images目录里所有文件,即不允许访问http://www.example.com/images
配置如下,添加return 404;及前后两行共三行
vi /etc/nginx/conf.d/blog.conf
server { listen 80; listen [::]:80; server_name www.example.com; root /usr/share/nginx/www; location = /images/ { return 404; } }
nginx.conf配置文件详解
参考https://www.zybuluo.com/phper/note/89391
为nginx开启HTTPS并使用自我签署证书
创建工作目录,执行以下指令mkdir ~/tls
&& cd ~/tls
生成私钥server.key,运行:openssl genrsa -des3 -out server.key 2048
按提示设置密码.以后使用此文件(通过openssl提供的命令或API)可能经常要求输入密码验证身份,如果想去除密码可以使用以下命令重新生成证书,但必须保证你这个私钥文件不会泄露
openssl rsa -in server.key -out server.key
输入刚刚的设置的密码
创建服务器证书的申请文件xxx.csr,运行以下指令,假设你已经搭建好三个虚拟主机, files_server、www、blog
生成主机files_server的申请文件files_server.csropenssl req -new -key server.key -out files_server.csr
其中Country Name填CN,CommonName填主机名.例如你的URL为https://www.ABC.XYZ这里就可以填www).
生成主机www的申请文件www.csropenssl req -new -key server.key -out www.csr
生成主机blog的申请文件blog.csropenssl req -new -key server.key -out blog.csr
创建CA证书,即自身也是CA机构openssl req -new -x509 -key server.key -out ca.crt -days 3650
创建自当前日期起有效期为期十年的服务器证书:
生成虚拟主机files_server的证书files_server.crt
openssl x509 -req -days 3650 -in files_server.csr -CA ca.crt -CAkey server.key -CAcreateserial -out files_server.crt
生成虚拟主机www的证书 www.crt
openssl x509 -req -days 3650 -in www.csr -CA ca.crt -CAkey server.key -CAcreateserial -out www.crt
生成虚拟主机blog的证书 blog.crt
openssl x509 -req -days 3650 -in blog.csr -CA ca.crt -CAkey server.key -CAcreateserial -out blog.crt
检查现在的文件ll
可以看到一共生成了10个文件,其中*.crt和server.key就是你的nginx需要的证书文件.
复制相关文件到相应的目录
cp *.key /etc/pki/tls/private/
cp *.crt /etc/pki/tls/certs/
配置nginx https服务,留意.crt证书和密钥文件.key的位置
vi /etc/nginx/conf.d/ssl.conf
# HTTPS server configuration # #server { # listen 443 ssl http2 default_server; # listen [::]:443 ssl; # server_name _; # root /usr/share/nginx/html; # # ssl_certificate cert.pem; # ssl_certificate_key cert.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 = /40x.html { # } # # error_page 500 502 503 504 /50x.html; # location = /50x.html { # } #} #以下是文件服务主机的配置,autoindex开头的三行用于分享文件和目录 server { listen 443 ssl; listen [::]:443 ssl; server_name files.example.com; root /usr/share/nginx/files; location / { #auth_basic "Restricted"; #网页认证用 #auth_basic_user_file /etc/nginx/pass_file;#网页认证用 autoindex on; autoindex_exact_size on; autoindex_localtime on; } # ssl_certificate /etc/pki/tls/certs/files_server.crt; ssl_certificate_key /etc/pki/tls/private/server.key; } #以下是www主机的配置 server { listen 443 ssl; listen [::]:443 ssl; server_name www.example.com; #location / { # root /usr/share/nginx/www; # index index.html ; #} # ssl_certificate /etc/pki/tls/certs/www.crt; ssl_certificate_key /etc/pki/tls/private/server.key; } #以下是blog主机的配置 server { listen 443 ssl; listen [::]:443 ssl; server_name blog.example.com; root /usr/share/nginx/blog; # ssl_certificate /etc/pki/tls/certs/blog.crt; ssl_certificate_key /etc/pki/tls/private/server.key; }
先测试一下,看看有没有报错nginx -t
重载配置
nginx -s reload
如果使用reload不生效就要使用restart
CentOS6:service nginx restart
CentOS7:systemctl restart nginx.service
用浏览器测试三个网页:
https://files.example.com
https://www.example.com
https://blog.example.com
强制跳转到HTTPS
意思是当用户访问http://www.example.com时,自动跳转到https://www.example.com
如果是网页服务器,在虚拟主机上添加一行配置return 301 https://$server_name$request_uri;
,示例:
vi /etc/nginx/conf.d/www.conf
server {
listen 80;
listen [::]:80;
server_name www.example.com;
return 301 https://$server_name$request_uri;
root /usr/share/nginx/html;
}
如果是文件共享服务器,在虚拟主机上添加一行配置return 301 https://$server_name$request_uri;
示例如下
vi /etc/nginx/conf.d/file_server.conf
location / { autoindex on; autoindex_exact_size on; autoindex_localtime on; return 301 https://$server_name$request_uri; }
先测试一下,看看有没有报错nginx -t
重载配置
nginx -s reload
如果使用reload不生效就要使用restart
CentOS6:service nginx restart
CentOS7:systemctl restart nginx.service
用浏览器测试三个网页,看看能不能跳转到https
http://files.example.com
http://www.example.com
http://blog.example.com
有道云笔记 https://note.youdao.com/ynoteshare/index.html?id=6c3af6d7c37749bcfdd2e7418246489c