更新yum镜像源
1.备份
mv -f /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
2.修改CentOS-Base.repo
# CentOS-Base.repo # # The mirror system uses the connecting IP address of the client and the # update status of each mirror to pick mirrors that are updated to and # geographically close to the client. You should use this for CentOS updates # unless you are manually picking other mirrors. # # If the mirrorlist= does not work for you, as a fall back you can try the # remarked out baseurl= line instead. # # [base] name=CentOS-6.6 - Base baseurl=http://mirrors.aliyun.com/centos-vault/6.6/os/x86_64/ gpgcheck=1 gpgkey=http://mirrors.aliyun.com/centos-vault/RPM-GPG-KEY-CentOS-6 [updates] name=CentOS-6.6 - Updates baseurl=http://mirrors.aliyun.com/centos-vault/6.6/updates/x86_64/ gpgcheck=1 gpgkey=http://mirrors.aliyun.com/centos-vault/RPM-GPG-KEY-CentOS-6 [extras] name=CentOS-6.6 - Extras baseurl=http://mirrors.aliyun.com/centos-vault/6.6/extras/x86_64/ gpgcheck=1 gpgkey=http://mirrors.aliyun.com/centos-vault/RPM-GPG-KEY-CentOS-6 [centosplus] name=CentOS-6.6 - Plus baseurl=http://mirrors.aliyun.com/centos-vault/6.6/centosplus/x86_64/ gpgcheck=1 enabled=0 gpgkey=http://mirrors.aliyun.com/centos-vault/RPM-GPG-KEY-CentOS-6 [contrib] name=CentOS-6.6 - Contrib baseurl=http://mirrors.aliyun.com/centos-vault/6.6/contrib/x86_64/ gpgcheck=1 enabled=0 gpgkey=http://mirrors.aliyun.com/centos-vault/RPM-GPG-KEY-CentOS-6
3.清理默认缓存包
yum clean all
4.生成yum源缓存
yum makecache
安装nginx
centos71. 安装epe:
yum install epel-release
2. 安装nginx
yum -y install nginx
3. 启动nginx
service nginx start
更新yum镜像源
1.更新之前请先安装wget,下载repo要用
yum install -y wget2.备份并下阿里云的base和epel源
mv -f /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repomv /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo.backup
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo3.清理默认缓存包
yum clean all4.生成yum源缓存
yum makecache5.更新yum源
yum -y update
安装nginx
关闭selinux1. 安装epe:
yum install epel-release
2. 安装nginx
yum -y install nginx
3. 启动nginx
service nginx start
记得要关闭selinux,否则监听其他端口时候会出现报nginx: [emerg] bind() to 0.0.0.0:8088 failed (13: Permission denied) 这样得错误
离线安装[root@localhost nginx]# getenforce #查询selinux状态
[root@localhost nginx]# setenforce 0 #临时将selinux关闭
如果需要永久关闭selinux,请编辑/etc/selinux/config文件,将SELINUX=disabled。
通常生产环境由于安全原因都无法访问互联网。此时就需要进行离线安装,主要有两种方式:源码编译、rpm包安装。源码编译耗费时间长且缺乏编译环境,所以一般都选择使用离线 rpm 包安装。
Nginx常用命令#配置一台相同系统的虚拟机,配置好yum源
#查看依赖
yum deplist nginx# 安装yum-utils
yum -y install yum-utils
# 下载 ansible 全量依赖包
repotrack nginx -p /root/local_nginx#将local_nginx拷贝到离线的系统
cd local_nginx#当执行下面的语句后,系统会自动选出所需的依赖包进行安装,不需要的就会自动清理。
rpm -Uvh *.rpm --nodeps --force#启动nginx
service nginx start
常用配置实例#配置位置:
vi /etc/nginx/nginx.conf
vi /etc/nginx/conf.d/default.conf
修改配置以后,需要重启服务
#检查配置nginx -t
nginx -t -c /etc/nginx/nginx.conf
#重新加载
nginx -s reload
#也可以直接restart重启服务
service nginx restart#重新打开日志文件
#nginx -s reopen
#查看Nginx的版本号:
nginx -V
#快速停止或关闭Nginx
nginx -s stop
#正常停止或关闭Nginx
nginx -s quit
根据 nginx.conf中的 include /etc/nginx/default.d/*.conf 。可以将自定义的配置配置在default.d
正向代理和反向代理区别区别在于代理的对象不一样,正向代理代理的对象是客户端,反向代理代理的对象是服务端。
反向代理
准备serverserver_8283.conf
用于模拟自己的服务
新增一个server,首页文件index2.html,模拟自己的接口服务
server_8282.conf
server {
listen 8282;
server_name localhost2;
location / {
root html;
index index2.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
新增一个server,首页文件改为index3.html,模拟自己的接口服务
server_8283.conf
server {
listen 8283;
server_name localhost2;
location / {
root html;
index index3.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
反向代理
proxy_fanxiang.conf
upstream domain {
server localhost:8283 weight=1;
server localhost:8282 weight=1 ;
}
server {
listen 8284;
server_name localhost3;
location / {
proxy_next_upstream error timeout http_502 http_503 http_504 ;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://domain;
}
}
验证
刷新http://localhost:8284/如果页面结果不断在所代理的服务之间来回跳,说明配置成功
proxy_bakup.conf
upstream domain2 {
server localhost:8283 weight=1;
server localhost:8282 weight=1 backup;
}
server {
listen 8285;
server_name localhost4;
location / {
proxy_next_upstream error timeout http_502 http_503 http_504 ;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://domain2;
}
}
验证:
刷新http://localhost:8285 页面一直在8283的服务,修改8283到一个不通的端口模拟8283挂掉,刷新http://localhost:8285 页面到了8282的服务,则配置成功
proxy_seperator.conf
upstream tomcat {
server 192.168.10.77:8080;
}
server {
listen 8181;
server_name localhost;
location /dest/ {
root /u01/isi/zh/;
index index.html;
}
location /zh_sys {
proxy_pass http://tomcat/zh_sys;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_cookie_path /zh_sys /zh_sys;
}
}
注意
1.nginx.conf中的user必须要静态文件目录/u01/isi/zh/的权限
2.http访问 ip:8181/dest/index.html访问的是/u01/isi/zh/dest/index.html
使用场景:
比如nginx所在主机可以映射外网端口,但是169.49:8888不能映射外网,就可以将nginx主机的8182端口转发到49的8888端口
forward.conf
server {
listen 8182;
server_name localhost;
location /group192 {
proxy_pass http://192.168.169.49:8888/group192;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /group1 {
proxy_pass http://192.168.169.49:8888/group1;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
自签名证书配置https
Nginx为了支持Https需要安装http_ssl_module模块。在编译时需要带上--with-http_ssl_module参数。
./configure --prefix=/usr/local/nginx --with-http_ssl_module make && make install
然后通过./nginx -V查看有没有--with-http_ssl_module参数。如果没有需要更新nginx
openssl生成公私钥无论是客户端还是服务端,都可以使用openssl命令来生成公私钥,前提是需要安装好openssl。
生成服务端私钥
openssl genrsa [-out filename] [numbits]
#比如:生成一个名为server.key的私钥,长度1024。
openssl genrsa -out server.key 1024
生成服务端公钥证书
openssl req -new -x509 [-key keyfile] [-out crtfile] [-days numdays]
#比如:生成一个名为server.crt的证书,有效期10年。
openssl req -new -x509 -key server.key -out server.crt -days 3650
依次会要求输入国家、省市、公司单位、域名、邮箱等信息
将证书拷贝到指定位置
443端口配置mkdir /etc/nginx/ssl/
cp server.key /etc/nginx/ssl/
cp server.crt /etc/nginx/ssl/
server_443.conf
server {
listen 443 ssl;
server_name localhost;
ssl_certificate /etc/nginx/ssl/server.crt; # server公钥证书
ssl_certificate_key /etc/nginx/ssl/server.key; # server私钥
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
80端口强制转到443端口
server_80.conf
server {
#监听80端口,强制转到443端口,进行https访问
listen 80;
server_name test.cn;
#return 301 https://192.168.10.130:443$request_uri;
rewrite ^(.*) https://$host$1 permanent;
#access_log /var/log/nginx/host.access.log main;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
}
443端口代理其他端口
例如希望443端口代理某个8282端口服务
443端口配置
server {
listen 443 ssl;
server_name localhost;
ssl_certificate /etc/nginx/ssl/server.crt; # server公钥证书
ssl_certificate_key /etc/nginx/ssl/server.key; # server私钥
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
#代理8282端口服务
location /8282 {
proxy_pass http://192.168.10.130:8282/;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
8282端口服务
server8282.conf
server {
listen 8282;
server_name test.cn;
location / {
root /usr/share/nginx/html;
index index2.html;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
负载均衡
IP_HASH
当IP进行重复访问时会被指定到上次访问的服务器,可以解决动态网站session共享问题
server_hash.conf
upstream wp_ip_hash{
ip_hash;
server 192.168.10.130:8283;
server 192.168.10.130:8284;
server 192.168.10.130:8285;
}
server {
listen 8282;
server_name test.cn;
location / {
#表示代理转发到 upstream wp_ip_hash
proxy_pass http://wp_ip_hash;
#表示传递时请求头不变, $host是nginx内置变量,表示的是当前的请求头,proxy_set_header表示设置请求头
proxy_set_header Host $host;
# 表示传递时来源的ip还是现在的客户端的ip
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 表示反向代理发送的HTTP协议的版本是1.1,HTTP1.1支持长连接(websocket)
proxy_http_version 1.1;
# 表示设置Upgrade不变(websocket)
proxy_set_header Upgrade $http_upgrade;
#表示如果 $http_upgrade为upgrade,则请求为upgrade(websocket),如果不是,就关闭连接
proxy_set_header Connection "upgrade";
}
}
基于URL的HASH
当客户端多次访问同一个地址时分配到固定的节点
url_hash.conf
upstream wp_url_hash{
hash $request_uri consistent;
server 192.168.10.130:8283;
server 192.168.10.130:8284;
server 192.168.10.130:8285;
}
server {
listen 8282;
server_name test.cn;
location / {
#表示代理转发到
proxy_pass http://wp_url_hash;
#表示传递时请求头不变, $host是nginx内置变量,表示的是当前的请求头,proxy_set_header表示设置请求头
proxy_set_header Host $host;
# 表示传递时来源的ip还是现在的客户端的ip
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 表示反向代理发送的HTTP协议的版本是1.1,HTTP1.1支持长连接(websocket)
proxy_http_version 1.1;
# 表示设置Upgrade不变(websocket)
proxy_set_header Upgrade $http_upgrade;
#表示如果 $http_upgrade为upgrade,则请求为upgrade(websocket),如果不是,就关闭连接
proxy_set_header Connection "upgrade";
}
}
最少连接数轮询
哪个节点当前的连接数少就分配给哪个节点处理
less_conn.conf
upstream wp_lease_conn{
least_conn;
server 192.168.10.130:8283;
server 192.168.10.130:8284;
server 192.168.10.130:8285;
}
server {
listen 8282;
server_name test.cn;
location / {
#表示代理转发到
proxy_pass http://wp_lease_conn;
#表示传递时请求头不变, $host是nginx内置变量,表示的是当前的请求头,proxy_set_header表示设置请求头
proxy_set_header Host $host;
# 表示传递时来源的ip还是现在的客户端的ip
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 表示反向代理发送的HTTP协议的版本是1.1,HTTP1.1支持长连接(websocket)
proxy_http_version 1.1;
# 表示设置Upgrade不变(websocket)
proxy_set_header Upgrade $http_upgrade;
#表示如果 $http_upgrade为upgrade,则请求为upgrade(websocket),如果不是,就关闭连接
proxy_set_header Connection "upgrade";
}
}
location配置
语法规则:location [=|~|~*|^~] /uri/ { … }
= 开头表示精确匹配
^~ 开头表示uri以某个常规字符串开头,理解为匹配 url路径即可。nginx不对url做编码,因此请求为/static/20%/aa,可以被规则^~ /static/ /aa匹配到(注意是空格)。
~ 开头表示区分大小写的正则匹配
~* 开头表示不区分大小写的正则匹配
!~和!~*分别为区分大小写不匹配及不区分大小写不匹配 的正则
/ 通用匹配,任何请求都会匹配到。
多个location配置的情况下匹配顺序为
首先匹配 =,其次匹配^~, 其次是按文件中顺序的正则匹配,最后是交给 / 通用匹配。当有匹配成功时候,停止匹配,按当前匹配规则处理请求
centos6 yum 源失效问题解决办法,头疼的老机器 - 云+社区 - 腾讯云
yum 下载全量依赖 rpm 包及离线安装(终极解决方案)_tfner123的博客-CSDN博客_yum离线安装
Nginx配置Https单向认证、双向认证以及多证书配置
解决nginx报错:nginx: [emerg] bind() to 0.0.0.0:8088 failed (13: Permission denied)_weixin_30631587的博客-CSDN博客



