当前位置:TranBon博客 > 首页 > 技术 > nginx配置指引.md

nginx配置指引.md

adminis3年前 (2021-02-21)技术27050

安装EPEL仓库

Centos7
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.csr
openssl req -new -key server.key -out files_server.csr
其中Country Name填CN,CommonName填主机名.例如你的URL为https://www.ABC.XYZ这里就可以填www).

生成主机www的申请文件www.csr
openssl req -new -key server.key -out www.csr

生成主机blog的申请文件blog.csr
openssl 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/ynoteshare1/index.html?id=6c3af6d7c37749bcfdd2e7418246489c&type=note#/

第7条随机版权

扫描二维码推送至手机访问。

版权声明:本文由TranBon博客发布,如需转载请注明出处。

本文链接:https://bk.tranbon.com/?id=278

相关文章

vi编辑器教程

http://blog.sina.com.cn/s/blog_736f1c59010136ry.htmlhttp://blog.csdn.net/lanxinju/article/details/57...

centos7破密时提示Authentication token manipulation error

centos7破密时提示Authentication token manipulation error

需要在passwd 前输入 chattr -i /etc/passwd chattr -i /etc/shadow如下:...

cnetos系统mysql配置my.cnf文件,跳过密码认证登录并设置远程登录(不一定有效)

cnetos系统mysql配置my.cnf文件,跳过密码认证登录并设置远程登录(不一定有效)

cnetos手动安装mysql没有my.cnf配置文件时, 1.可以从其它服务器把my.cnf文件拷贝到需要的服务器上,2.可以touch创建my.cnf文件 这边是直接使用touch命令my.c...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。