Nginx 是一个高性能的 HTTP 和反向代理 web 服务器,同时也提供了 IMAP/POP3/SMTP 服务,其因丰富的功能集、稳定性、示例配置文件和低系统资源的消耗受到了开发者的欢迎
安装Nginx
- 准备工作
yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel
- 下载
官网下载Nginx tar包 - 编译安装
tar -zxvf nginx-x.x.x.tar.gz
cd nginx
./configure --prefix=/usr/local/nginx
支持ssl编译
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
make
make install
- 开机自启
vim /lib/systemd/system/nginx.service
[Unit]
Description=nginx service
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true
[Install]
WantedBy=multi-user.target
systemctl enable nginx
- 启动|关闭|查看状态
systemctl start|stop|status nginx
配置负载均衡
#这里定义Web服务器池,包含了251,252两个Web节点
upstream cmlx_server_pools {
server 10.0.1.11:10011 weight=1;
server 10.0.1.12:10012 weight=1;
}
#这里定义代理的负载均衡域名虚拟主机
server {
listen 10018;
server_name www.cmlx.com;
location / {
#访问www.cmlx.com,请求发送给cmlx_server_pools里面的节点
proxy_pass http://cmlx_server_pools;
}
}
侦听端口
server {
# Standard HTTP Protocol
listen 80;
# Standard HTTPS Protocol
listen 443 ssl;
# For http2
listen 443 ssl http2;
# Listen on 80 using IPv6
listen [::]:80;
# Listen only on using IPv6
listen [::]:80 ipv6only=on;
}
访问日志
server {
# Relative or full path to log file
access_log /path/to/file.log;
# Turn 'on' or 'off'
access_log on;
}
域名
server {
# Listen to yourdomain.com
server_name yourdomain.com;
# Listen to multiple domains server_name yourdomain.com www.yourdomain.com;
# Listen to all domains
server_name *.yourdomain.com;
# Listen to all top-level domains
server_name yourdomain.*;
# Listen to unspecified Hostnames (Listens to IP address itself)
server_name "";
}
静态资源
server {
listen 80;
server_name yourdomain.com;
location / {
root /path/to/website;
}
}
重定向
server {
listen 80;
server_name www.yourdomain.com;
return 301 http://yourdomain.com$request_uri;
}
server {
listen 80;
server_name www.yourdomain.com;
location /redirect-url {
return 301 http://otherdomain.com;
}
}
反向代理
server {
listen 80;
server_name yourdomain.com;
location / {
proxy_pass http://0.0.0.0:3000;
# where 0.0.0.0:3000 is your application server (Ex: node.js) bound on 0.0.0.0 listening on port 3000
}
}
SSL协议
server {
listen 443 ssl;
server_name yourdomain.com;
ssl on;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/privatekey.pem;
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /path/to/fullchain.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_session_timeout 1h;
ssl_session_cache shared:SSL:50m;
add_header Strict-Transport-Security max-age=15768000;
}
# Permanent Redirect for HTTP to HTTPS
server {
listen 80;
server_name yourdomain.com;
return 301 https://$host$request_uri;
}
密码访问
在服务上搭建了一些服务,如果我们不想让所有人访问,就可以设置访问认证,让用户输入正确的用户名和密码才能访问。
- 安装htpassword工具
1> 通过yum安装
yum -y install httpd-tools
2>设置用户名和密码,并把指定用户名、密码保存到指定文件
htpasswd -c [passwdfile] [username]
注意:/usr/local/nginx/passwd 是生成密码后的文件保存路径(passwdfile),codeauth是用户名(username)
查看最后生成的密码文件的内容:(codeauth分号后的内容是加密过的密码)
2. 修改nginx配置文件
找到Nginx配置文件,要对响应的服务开启验证,所以在配置文件中的server修改如下:
server {
listen 80;
server_name localhost;
.......
#新增下面两行
auth_basic "Please input password"; #这里是验证时的提示信息
auth_basic_user_file /usr/local/nginx/passwd;
location /{
.......
}
重启Nginx
3. htpassword 其他参数
htpasswd [-cmdpsD] [passwdfile] [username]
htpasswd -b[cmdpsD] [passwdfile] [username] [password]
htpasswd -n[mdps] username
htpasswd -nb[mdps] username password
htpasswd命令选项参数说明
-c 创建一个加密文件
-n 不更新加密文件,只将htpasswd命令加密后的用户名密码显示在屏幕上
-m 默认htpassswd命令采用MD5算法对密码进行加密
-d htpassswd命令采用CRYPT算法对密码进行加密
-p htpassswd命令不对密码进行进行加密,即明文密码
-s htpassswd命令采用SHA算法对密码进行加密
-b htpassswd命令行中一并输入用户名和密码而不是根据提示输入密码
-D 删除指定的用户
- 创建一个新用户
htpasswd -b [passwdfile] [username] [passwd]
此时查看passwd 文件中的用户和密码
- 删除用户
htpasswd -D [passwdfile] [username]
此时查看passwdfile 中的用户和密码
- 创建文件,添加用户
htpasswd -bc [passedfile] [username]
此时的文件中的用户