ubuntu下tomcat屏蔽外部访问

在服务器采用nginx+tomcat这种组合方式的情况下,我们需要让外部访问完全通过nginx访问tomcat,也就是禁止外部直接访问tomcat。
这时候,需要做以下配置:
打开/etc/tomcat8/server.xml,找到Connector,加上address=”127.0.0.1″。
然后重启tomcat:service tomcat8 restart

ubuntu下tomcat参数调优

打开文件 /etc/default/tomcat8
修改里面的JAVA_OPTS一行,默认的-Xmx是128m,一般情况下这个数字太小,要根据实际情况调整。另外,加上-Xms和-XX:MaxPermSize这些参数。
比如,我的服务器768M内存,调整成了以下:
JAVA_OPTS=”-Djava.awt.headless=true -Xms128m -Xmx384m -XX:MaxPermSize=128m -XX:+UseConcMarkSweepGC”
然后重启tomcat:service tomcat8 restart

mysql设置主从复制

准备2台服务器,服务器1作为主数据库,服务器2作为从数据库。

1.修改主库的配置
这里使用的是ubuntu下的MYSQL,版本为5.6.30,使用apt-get方式安装。
1)首先修改/etc/mysql/conf.d/mysql.cnf
[mysqld]
bind-address = 0.0.0.0
log-bin=mysql-bin
server-id=1
2)然后修改/etc/mysql/mysql.conf.d/mysqld.cnf。
bind-address = 0.0.0.0
注意:将上面2个文件的bind-address都设置成0.0.0.0,是为了让从库能够连接主库。
3)重启mysql使以上修改生效: service mysql restart

2.在主数据库创建用户
CREATE USER ‘repl’@’10.99.%.%’ IDENTIFIED BY ‘slavepassword’;
GRANT REPLICATION SLAVE ON *.* TO ‘repl’@’10.99.%.%’;
以上ip地址要根据实际情况设置。

3.获取主数据库复制文件名称和复制点位置
首先给数据库上锁,防止数据写入:FLUSH TABLES WITH READ LOCK;
获取主库状态:SHOW MASTER STATUS;
得到File和Potision2个字段的值:
+——————+———-+————–+——————+——————-+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+——————+———-+————–+——————+——————-+
| mysql-bin.000002 | 120 | | | |
+——————+———-+————–+——————+——————-+
记下2个值,然后就可以解锁了:UNLOCK TABLES;

4.配置从数据库
1)编辑从数据库的/etc/mysql/conf.d/mysql.cnf
[mysqld]
server-id=2
注意:如果只想复制某1个库,还要添加以下配置项
replicate-wild-do-table=dbname.%
这里的dbname是想复制的主库的某一个数据库的名字。

2)重启mysql: service mysql restart

3)设置复制配置:
CHANGE MASTER TO
MASTER_HOST=’10.99.0.10′,
MASTER_USER=’repl’,
MASTER_PASSWORD=’slavepassword’,
MASTER_LOG_FILE=’mysql-bin.000002′,
MASTER_LOG_POS=120;
这里MASTER_HOST是主库的ip地址,要根据实际情况指定。
4)启动复制:START SLAVE;

5.试验
主库上新建一个数据库: create database hello
稍等一会儿,在从库上会看到多了hello数据库,说明以上配置成功。
可以用以下命令在从库上查看复制的状态:show slave status;

mysql中文乱码的问题

找到my.cnf,加入如下配置。

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

[mysqld]
collation-server = utf8_unicode_ci
init-connect=’SET NAMES utf8′
character-set-server = utf8

重启mysql: sudo service mysql restart

iptables的使用

iptables
如上图所示,iptables会检查设定的规则,如果满足条件则执行对应的action,如果所有规则都不满足,则会执行默认policy。可能的policy有:accept, drop, reject。
只所以叫iptables,是因为在这个防火墙的链路(chain)里会涉及很多tables,常用的有filter,nat。如果只针对本机设定防火墙,一般只涉及filter。
通过对filter设置一系列规则,可以达到对进出的包进行限制的目的,比如drop或reject来自某个ip的包,还可以再进一步,drop或reject目标是本机某个端口的包。
(1)查看现有iptables设置:iptables -L -n
-n的意思是不要进行反查,如果不加则会列出端口对应的服务
结果:
Chain INPUT (policy ACCEPT)
target prot opt source destination

Chain FORWARD (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination
上面显示目前还没有设定规则,3条是默认policy,分别针对input(进入本机的包),forward,output(从本机出去的包)。如果只针对本机,一般只常用input和output。
(2)清除现有规则
iptables -F
会清除掉所有规则,但默认policy不会变。
清除规则前要特别注意,必须查清楚目前的默认policy。比如,如果INPUT的默认policy是drop或reject,那么清除后将无法远程连接这台机器!所以这时候必须先将INPUT的默认policy改成ACCEPT,再做清除操作。
(3)设定默认policy
语法:iptables -P [INPUT, OUTPUT, FORWARD] [ACCEPT, DROP]
例如,将INPUT默认policy改成drop:iptables -P INPUT DROP
(4)设置规则
语法:iptables -AI [INPUT, OUTPUT, FORWARD] -i [lo, eth0, eth1] -o [lo, eth0, eth1] -p [tcp, udp, icmp, all] -s 来源IP -d 目标ip –dport 目标端口 –sport 来源端口 -j [ACCEPT, REJECT, DROP]
-A表示在现有的规则后添加一条新的,假如现在有4条规则,那么新的一条将会是第5条
-I表示插入一条规则在最前面,假如现在有4条规则,那么新的一条将会是第1条,原来的4条变成现在的第2-5条
来源ip和目标ip可以是单个ip(如192.168.1.1),也可以是子网(如192.168.1.1/24)
如果使用–dport 或 –sport,必须要有-p参数,且必须是tcp或udp。
例如,reject所有来自192.168.1.1的TCP包: iptables -A INPUT -p tcp -s 192.168.1.1 -j REJECT
(5)规则的顺序
规则顺序非常重要。因为iptables会按照顺序检查规则,如果顺序不当,会造成意外的结果。
比如: 我的80端口只想接收来自192.168.1.1的tcp包,不接收192.168.1.1/24子网里的其它机器的tcp包,来自其余机器的请求都接收。
假如INPUT的默认规则是ACCEPT。
正确的规则顺序是:
iptables -A INPUT -p tcp -s 192.168.1.1 -j ACCEPT
iptables -A INPUT -p tcp -s 192.168.1.1/24 -j REJECT
如果将以上2条规则颠倒,假设192.168.1.1给我的80端口发1个tcp包,由于满足颠倒后的第1条规则,它被reject掉,跟期望不符。
(6)保存
如果不保存,机器重启后规则会消失。
在ubuntu下使用iptables-persistent来保存。
安装:sudo apt-get install iptables-persistent
编辑完规则后保存规则:sudo dpkg-reconfigure iptables-persistent